Matplotlib:imshow中的set_data没有效果

ahe*_*elm 14 python matplotlib

我有一个奇怪的错误,如果没有你的帮助,我无法修复.imshow在matplotlib中设置图像后,即使我用方法更改它,它也始终保持不变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()
Run Code Online (Sandbox Code Playgroud)

绘制之后,该方法set_data不会改变绘图中的任何内容.有人能解释一下为什么吗?

编辑

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

Red*_*bts 20

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

当你实例imshow,它设置vminvmax从初始数据,并且永远不会再接触它.在你的代码,它同时设置vminvmax为0,因为您的数据,haha = zeros((2,2))是处处为零.

您的新活动应包括自动缩放img.autoscale(),或通过设置img.norm.vmin/vmax您喜欢的内容来明确设置新的缩放术语.


Lev*_*von 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()
Run Code Online (Sandbox Code Playgroud)

当我显示该图两次(一次在更改为 之前haha,一次在最后)时,它确实发生了变化。

  • 它会解决这个问题,但会强制增加一个额外的情节。每次绘制新的“imshow”时,都会消耗越来越多的内存。 (2认同)