Matplotlib:imshow中的set_data没有效果

时间:2012-06-10 16:54:41

标签: python matplotlib

我有一个奇怪的错误,如果没有你的帮助,我无法修复。在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不会改变图中的任何内容。有人能解释我为什么吗?

修改

只是添加了几行来指出我真正想做的事情。 我想在按下鼠标按钮后重绘数据。我不想删除整个数字,因为如果只有一件事发生变化就会很愚蠢。

2 个答案:

答案 0 :(得分:18)

问题是因为您在第一次调用后没有更新像素缩放。

当您实例化imshow时,它会从初始数据中设置vminvmax,并且永远不会再次触摸它。在您的代码中,它将vminvmax都设置为0,因为您的数据haha = zeros((2,2))在任何地方都为零。

您的新活动应包括使用img.autoscale()进行自动缩放,或通过将img.norm.vmin/vmax设置为您喜欢的内容来明确设置新的缩放条款。

设置新vminvmax的功能是:

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之前和结束时),它确实会发生变化。