繁体   English   中英

Matplotlib:imshow中的set_data没有效果

[英]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 ,它会从初始数据中设置vminvmax ,而不会再次触摸它。 在您的代码中,它将vminvmax都设置为0,因为您的数据haha = zeros((2,2))在任何地方都为零。

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

设置新vminvmax是:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM