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設定され、再び触れることはありません。コードでは、データがどこでもゼロであるため、との両方を0に設定します。vminvmaxvminvmaxhaha = zeros((2,2))

新しいイベントには、による自動スケーリングを含めるか、好みimg.autoscale()に設定img.norm.vmin/vmaxして新しいスケーリング項を明示的に設定する必要があります。

newを設定する関数vminは次のvmaxとおりです。

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()

プロットを 2 回 ( に変更する前hahaと最後に 1 回) 表示すると、変更されます。

于 2012-06-10T17:07:43.357 に答える