Matplotlib:在imshow中设置数据对p没有影响

2024-04-19 19:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

编辑

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


Tags: 方法importeventimgdatagetmatplotlibas
2条回答

这能给你预期的结果吗?

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之前和最后一次)时,它确实会更改。

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

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

您的新事件应该包括使用img.autoscale()进行自动缩放,或者通过将img.norm.vmin/vmax设置为您喜欢的值来显式设置新的缩放条件。

设置新的vminvmax的函数是:

img.set_clim(vmin=new_vim, vmax=new_vmax)

相关问题 更多 >