Python 如何获取matplotlib';imshow是否每秒刷新一次?

Python 如何获取matplotlib';imshow是否每秒刷新一次?,python,matplotlib,heatmap,imshow,redraw,Python,Matplotlib,Heatmap,Imshow,Redraw,有一个传感器,可以给我一个8x8的温度网格,我要在实时热图上显示。我制作了一个8x8兰特来模拟这些数据。这个热图应该可以运行,直到我告诉它不要再运行。我正在使用python3和matplotlib尝试这种可视化 我尝试了多种方法来实现这一点,包括清除屏幕、将plt变成图形、告诉show()不要阻塞等等。您可以在评论中看到我的许多尝试。它要么只显示一次,要么根本不显示(例如,ion()和plt.show(block=False)从不显示任何数据)。我的头撞在墙上整整两个工作日,我不明白为什么它不能

有一个传感器,可以给我一个8x8的温度网格,我要在实时热图上显示。我制作了一个8x8兰特来模拟这些数据。这个热图应该可以运行,直到我告诉它不要再运行。我正在使用python3和matplotlib尝试这种可视化

我尝试了多种方法来实现这一点,包括清除屏幕、将plt变成图形、告诉show()不要阻塞等等。您可以在评论中看到我的许多尝试。它要么只显示一次,要么根本不显示(例如,ion()和plt.show(block=False)从不显示任何数据)。我的头撞在墙上整整两个工作日,我不明白为什么它不能正确显示

import time
import socket
import matplotlib.pyplot as plt
import numpy as np 
import random

first = True
randArray = []

#plt.ion()
plt.show(block=False)
#fig = plt.figure()
#str1 = ''.join(str(e) for e in amg.pixels)
#print (type(str1))
while True:
    #create a bunch of random numbers
    randArray = np.random.randint(0,50, size=(8,8))
    #print the array, just so I know you're not broken
    for x in randArray:
        print(x)
    #This is my attempt to clear.   
    if (first == False):
        plt.clf()
    first = False
    #basical visualization
    plt.imshow(randArray, cmap='hot', interpolation='nearest')
    plt.draw()
    plt.show()
    #fig.canvas.draw()
    #plt.canvas.draw()
    #plt.display.update
    print("Pausing...")
    time.sleep(5)
我希望代码每5秒生成一组新的数字,然后用这些新数字的颜色刷新屏幕。如果我不中断的话,它应该可以运行几个小时,但是屏幕永远不会刷新

更多:我已经尝试了“如何更新matplotlib中的绘图”一文中列出的所有内容,他们所做的一切都只是为了确保不会填充任何图形。启动器通过显示在任务栏中而表现得好像要做什么,但随后什么也不做。我在Mac和Pi上都试过了,都有同样的问题。也许是因为那篇文章已经8年了,而这是python 3而不是python 2?可能是因为我使用imshow()而不是plot()?我也不知道如何让他们的代码在我的机器上运行


编辑:多亏了第一批评论者的推荐,我已经把它用于制作覆盆子圆周率。但现在我想知道。。。。我的Mac电脑出了什么问题?

这是一个类似的问题。 您可以尝试将代码修改为以下内容:

import time
import socket
import matplotlib.pyplot as plt
import numpy as np 
import random

first = True
randArray = []

#plt.ion()
plt.show(block=False)
#fig = plt.figure()
#str1 = ''.join(str(e) for e in amg.pixels)
#print (type(str1))
fig = plt.figure()
for i in range(0,5):
    #create a bunch of random numbers
    randArray = np.random.randint(0,50, size=(8,8))
    #print the array, just so I know you're not broken
    for x in randArray:
        print(x)
    #This is my attempt to clear.   
    if (first == False):
        plt.clf()
    first = False
    #basical visualization
    ax = fig.add_subplot(111)
    ax.imshow(randArray, cmap='hot', interpolation='nearest')
    fig.canvas.draw()
    fig.canvas.flush_events()
    #fig.canvas.draw()
    #plt.canvas.draw()
    #plt.display.update
    print("Pausing...")
    time.sleep(2)
祝你度过愉快的一天,好好休息:)。

试试这个:

导入matplotlib.pyplot作为plt
将numpy作为np导入
尽管如此:
#创建一组随机数
random_array=np.random.randint(0,50,size=(8,8))
#打印阵列,这样我就知道你没有崩溃
打印(随机数组)
#清除图像,因为我们没有关闭它
plt.clf()
#显示图像
#plt.图(figsize=(5,5))
plt.imshow(随机数组,cmap='hot',插值='nearest')
plt.colorbar()
打印(“暂停…”)
plt.暂停(5)
#取消对此行的注释,并使用plt.clf()注释该行
#plt.close()
神奇的是,这一行是
plt.pause(5)
,它显示图像五秒钟。如果要关闭它(
plt.close()
)或清除它(
plt.clf()
),则由您决定。当您想要不断更新绘图时,您不会使用
plt.show()
plt.draw()
,而是使用
plt.pause()


取消注释某些行以尝试某些变体。。。当然,有些是行不通的

可能重复的Nope。我在那篇文章里试过了所有的方法,但仍然没有任何效果。我甚至尝试过别人说有效的代码,但我无法让它发挥作用。这个建议已经8年了,所以我猜Python3中的某些东西改变了它的工作方式。VtotheT,这与我在fig.canvas中的其他尝试有相同的问题。Python在我的菜单栏(mac)中弹出并反弹,就像它要做什么一样,但从不显示任何内容。它只是不断生成新数据,没有可视化。我想这是我的电脑出了问题,只是我也在pi上试过了。