我有一个奇怪的错误,如果没有你的帮助,我无法修复。在matplotlib中使用imshow
设置图像后,即使我使用方法set_data
更改它,它也始终保持不变。请看一下这个例子:
import numpy as np
from matplotlib import pyplot as plt
def newevent(event):
haha[1,1] += 1
img.set_data(haha)
print img.get_array() # the data is change at this point
plt.draw()
haha = np.zeros((2,2))
img = plt.imshow(haha)
print img.get_array() # [[0,0],[0,0]]
plt.connect('button_press_event', newevent)
plt.show()
绘制之后,方法set_data
不会改变图中的任何内容。有人能解释我为什么吗?
修改
只是添加了几行来指出我真正想做的事情。 我想在按下鼠标按钮后重绘数据。我不想删除整个数字,因为如果只有一件事发生变化就会很愚蠢。
答案 0 :(得分:18)
问题是因为您在第一次调用后没有更新像素缩放。
当您实例化imshow
时,它会从初始数据中设置vmin
和vmax
,并且永远不会再次触摸它。在您的代码中,它将vmin
和vmax
都设置为0,因为您的数据haha = zeros((2,2))
在任何地方都为零。
您的新活动应包括使用img.autoscale()
进行自动缩放,或通过将img.norm.vmin/vmax
设置为您喜欢的内容来明确设置新的缩放条款。
设置新vmin
和vmax
的功能是:
img.set_clim(vmin=new_vim, vmax=new_vmax)
答案 1 :(得分:3)
这能否为您提供所期望的输出?
import numpy as np
from matplotlib import pyplot as plt
haha = np.zeros((2,2))
img = plt.imshow(haha)
print img.get_array() # [[0,0],[0,0]]
haha[1,1] += 1
img.set_data(haha)
img = plt.imshow(haha) # <<------- added this line
print img.get_array() # [[0,0],[0,1]]
plt.show()
当我显示两次图表时(在更改为haha
之前和结束时),它确实会发生变化。