Matplotlib Imshow 不会随 Draw 更新



我在使用新数据更新imshow时遇到了麻烦。作为参考,我正在从串行端口提取数据并试图绘制它,每秒钟更新一次。我一直在用线程积累数据,所以我最初认为这可能是问题所在,因为matplotlib不是线程安全的。然而,我不能让下面这个简单的例子工作:

import numpy as np
import matplotlib.pyplot as plt 
import time
dat = np.random.rand(100,10)
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
image = ax.imshow(np.zeros((10,10)))
fig.canvas.draw()
count = 0
while count < 100:
image.set_data(dat[count:count+10])
fig.canvas.draw()
count += 10
time.sleep(1)

使用TkAgg,我只得到全0的图,它永远不会更新,然后退出。使用Qt5Agg,退出前会弹出一个空窗口。

我尝试了各种组合的draw_idle(), flush_events()和plt.show(block=False),具有相同的结果。

python 3.8.10, matplotlib 3.2.2

贴完这篇文章后,我立刻想出了解决办法。我用全零初始化了这个图-将其更改为一个随机的值数组可以修复它。

我不确定为什么从全零开始打破了颜色缩放,尽管从matplotlib文档中默认的规范化缩放输入数据[0,1],所以我怀疑这就是问题所在。

最新更新