2011-12-21 14 views
2

1台のコンピュータでは、matplotlibを使用してプロットを生成します。プロットが生成されると、ファイルに保存されます。このファイルは、matplotlibの外部の別のアプリケーションによって使用されます。生成されたPNGファイルはユーザに表示され、ユーザは画像ファイルをクリックして対話する。 X、Yピクセルの座標が記録され、matplotlibを使用するPythonプログラムに送り返されるので、これらのピクセル座標をどのように変換してユーザーがどこのチャートをクリックしたかを調べることができます。matplotlibの外部マウスクリックの翻訳方法

私が見つけようとしてきたのは、図形自体の位置を計算できるように、原点が(ピクセル単位で)どこにあるかを判断する方法です。たとえば、画像が100×100ピクセルで、X軸とY軸が画像の端から10ピクセルあることがわかっている - 原点は(10,10)になり、(80、 80)、実際のクリックが私のプロットでは(70,70)にあることが分かりました。これまでのところ私は軸の端に参照を与える何かを見つけることができず、実際のプロットが始まります。

答えて

2

transformation tutorialをご覧ください。ここでは、ポイントを1つの単位/参照フレームで別のものに変換する方法について説明します。ここ

これを実証するいくつかのコードである:

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

SCALE=1 
MOUSE_CLICK = (80*SCALE,80*SCALE) 

fig = plt.figure(figsize=(1*SCALE,1*SCALE),dpi=100) # 100x100 
rect = [.1,.1,.8,.8] 
ax = fig.add_axes(rect) 
ax.plot(range(9),range(9)) 

# tranformations to help convert pixels to other units 
fromPixelToFig = fig.transFigure.inverted() 
fromPixelToData = ax.transData.inverted() 

origin = ax.transData.transform((0,0)) 
print "origin in Pixels = ",origin 
print "origin in Figure units = ",fromPixelToFig.transform(origin) 

print "click in Pixels: ",MOUSE_CLICK 
print "click in Figure Units: ",fromPixelToFig.transform(MOUSE_CLICK) 
clickInData = fromPixelToData.transform(MOUSE_CLICK) 
print "click in Data Units: ",clickInData 

circ = patches.Circle(clickInData,radius=.25) 
ax.add_patch(circ) 

fig.savefig('mouseClick.png') 

このスクリプトの出力である:

origin in Pixels = [ 10. 10.] 
origin in Figure units = [ 0.1 0.1] 
click in Pixels: (80, 80) 
click in Figure Units: [ 0.8 0.8] 
click in Data Units: [ 7. 7.] 

これは、以下の(小さな)図に結果:

enter image description here

これは、より大きな例(SCALEは4に設定されています): enter image description here

+0

ヤンさん、ありがとうございました –