[英]Matplotlib: no effect of set_data in imshow for the plot
我有一个奇怪的错误,如果没有你的帮助,我无法修复。 在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
不会更改绘图内的任何内容。 有人能解释一下为什么吗?
编辑
只是添加了几行来指出我真正想做的事情。 我想在按下鼠标按钮后重绘数据。 我不想删除整个数字,因为如果只有一件事发生变化就会很愚蠢。
问题是因为您在第一次调用后没有更新像素缩放。
当您实例化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)
这会给你预期的输出吗?
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
之前和结尾之前),它确实会发生变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.