15

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

编辑

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

4

2 回答 2

23

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

当您实例化imshow时,它会从初始数据中设置vmin和,并且永远不会再接触它。vmax在您的代码中,它将vmin和都设置vmax为 0,因为您的数据 ,haha = zeros((2,2))处处为零。

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

设置新的函数vminvmax

img.set_clim(vmin=new_vim, vmax=new_vmax)
于 2012-09-18T05:36:39.670 回答
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,最后一次),它确实发生了变化。

于 2012-06-10T17:07:43.357 回答