2011-09-30 8 views
2

私はMatlabからNumPy/matplotlibに移行しています。欠けていると思われるmatplotlibの特徴は、インタラクティブなプロットです。matplotlibによるインタラクティブな画像プロット

私はimshow()(これはMatlabとmatplotlibの両方がこれでうまくいく)を使ってグレースケール画像をプロットします。これは便利なケースです。Zooming and panningが便利です。上の図では、特定のピクセル(そのx座標とy座標)を特定し、その値を取得したいと考えています。

これはMatlabの図では簡単ですが、matplotlibでこれを行う方法はありますか?

Thisが近いように見えますが、画像のためのものではありません。

答えて

2

カスタムイベントハンドラは、これに必要なものです。難しいことではありませんが、「うまくいく」というわけでもありません。

This questionはあなたの後ろにかなり近いようです。明確化が必要な場合は、私は詳細を追加して嬉しいです。

+0

を。私はそれを試み、あなたに知らせるでしょう。私はSOを検索したときにその質問を見つけられませんでした。 私の目的のために、補間値は必要ないので、イメージ配列から値を取得することが私にとって最良の方法です。私はmatplotlibの拡張性に感謝しますが、このようなものを組み込むことは確かにいいでしょう。 –

+0

遅れて申し訳ありません。はい、その質問に対するあなたの答えはかなり気の利いたイベントハンドラを持っています。それは私の必要性のために十分に機能しますが、クリックするのではなく、マウスオーバー時に図のステータスバーに情報を表示することはさらにクーラーになります。後で時間や関心があれば、私ができることを見ていきます。 –

1

私はあなたがすでにこれを行うことができたと確信しています。ちょっと(!)linkを変更して、図面エリア内でクリックしたx座標とy座標を与える次のコードを記述しました。

from pylab import * 
import sys 
from numpy import * 
from matplotlib import pyplot 

class Test: 

    def __init__(self, x, y): 
    self.x = x 
    self.y = y 

    def __call__(self,event): 
    if event.inaxes: 
     print("Inside drawing area!") 
     print("x: ", event.x) 
     print("y: ", event.y) 
    else: 
     print("Outside drawing area!") 

if __name__ == '__main__':  
    x = range(10) 
    y = range(10)  
    fig = pyplot.figure("Test Interactive") 
    pyplot.scatter(x,y) 
    test = Test(x,y) 
    connect('button_press_event',test)  
    pyplot.show() 

また、これは、簡単に料理link内に提供された1つ以上のインタラクティブ作図の基本を理解するために行う必要があります。

P.S .:このプログラムは、正確なピクセル位置を提供します。その位置の値は、それぞれのピクセルのグレースケール値を与えるはずです。

また次は助けることができる:非常に有望に見える http://matplotlib.sourceforge.net/users/image_tutorial.html