有一个传感器,可以为我提供8x8的温度网格,可以在实时热图上显示。我已经做了一个8x8兰特来模拟该数据。该热图应该能够运行,直到我告诉它不再运行为止。我正在使用python3和matplotlib尝试这种可视化。
我尝试了一些方法来完成这项工作,包括清除屏幕,将plt转换为图形,告诉show()不要阻塞等。您可以在注释中看到许多尝试。它要么只显示一次,要么根本不显示(例如ion()和plt.show(block = False)永远不显示任何数据)。我已经把头撞在墙上整整2天了,我不知道为什么它不能正确显示。
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怎么了?
答案 0 :(得分:1)
这是与this one类似的问题。 您可以尝试将代码修改为如下形式:
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)
今天过得愉快,休息一下:)。
答案 1 :(得分:0)
尝试这个:
import matplotlib.pyplot as plt
import numpy as np
while True:
#create a bunch of random numbers
random_array = np.random.randint(0,50, size=(8,8))
#print the array, just so I know you're not broken
print(random_array)
#clear the image because we didn't close it
plt.clf()
#show the image
# plt.figure(figsize=(5, 5))
plt.imshow(random_array, cmap='hot', interpolation='nearest')
plt.colorbar()
print("Pausing...")
plt.pause(5)
#uncomment this line and comment the line with plt.clf()
# plt.close()
神奇之处在于plt.pause(5)
行,它显示图像五秒钟。是否要关闭它(plt.close()
)或清除它(plt.clf()
)取决于您。当您想不断更新绘图时,不用plt.show()
或plt.draw()
,而要使用plt.pause()
。
取消注释某些行以尝试某些变体...当然,其中一些将不起作用。