2012-06-10 32 views
6

私はあなたの助けなしに修正できない奇妙なエラーがあります。私がimshowの画像をmatplotlibにセットした後は、set_dataという方法でそれを変更しても常に同じままです。ただ、この例に見てみましょう:私はそれをプロットした後、方法set_dataはプロット内の何も変わりません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() 

。誰かがなぜ私を説明することはできますか?

EDIT

はちょうど私が実際に何をしたいのかを指摘するの数行を追加しました。 マウスボタンを押した後にデータを再描画したい。私は全体の図形を削除したくない。なぜなら、ただ1つのことだけが変わったらばかげてしまうからだ。

+0

エッジの1つに他の色があります。 – ahelm

+0

'newevent'はどこで呼びますか? – Levon

+0

申し訳ありません。それを忘れてしまった。 – ahelm

答えて

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に変更前の、そして最後に)プロットを表示するとき、それは変更ありません。

+0

コードスニペットを変更して、私が持っているものを指摘しました – ahelm

+0

@PateToniどこに 'newevent'を呼んでいるのかわかりません - 私の答えはあなたの問題を解決できませんでしたか? – Levon

+0

これで解決しますが、追加のプロットが強制されます。あなたが新しい 'imshow'を書くたびにますます多くのメモリを消費します。 – ahelm

12

問題は、最初の呼び出し後にピクセルスケーリングを更新していないためです。

imshowをインスタンス化すると、初期データからvminvmaxに設定され、再びそれには触れません。あなたのコードでは、あなたのデータhaha = zeros((2,2))がどこにでもゼロであるので、vminvmaxを0に設定します。

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

+1

ありがとう!これは私のために働いた。 =) –

関連する問題