2011-12-21 3 views
2

한 컴퓨터에서 matplotlib를 사용하여 플롯을 생성합니다. 플롯이 생성되면 파일로 저장됩니다. 이 파일은 matplotlib 외부의 다른 응용 프로그램에서 사용합니다. 생성 된 PNG 파일은 사용자에게 표시되며 사용자는 이미지 파일을 클릭하여 상호 작용합니다. X, Y 픽셀 좌표가 기록되어 matplotlib를 사용하는 Python 프로그램으로 다시 전송되므로, 어떻게하면 픽셀 좌표를 변환하고 사용자가 차트에서 클릭 한 위치를 결정할 수 있는지가 궁금합니다.matplotlib에서 외부 마우스 클릭을 변환하는 방법

내가 찾고자했던 것은 그림 자체의 위치를 ​​계산할 수 있도록 원점 (픽셀 단위)을 결정하는 방법입니다. 예를 들어, 이미지가 100 X 100 픽셀이고 X 축과 Y 축이 이미지 가장자리에서 10 픽셀 - 원점이 (10,10) -이고 마우스 클릭 (80, 80) 그러면 실제 클릭이 내 플롯에서 (70,70)에 있음을 알 수 있습니다. 지금까지 나는 축의 끝 부분에 어떤 참조 점이라도 줄 수있는 것을 찾을 수 없었습니다. 그리고 실제 줄거리가 시작됩니다.

답변

2

transformation tutorial을 살펴보십시오. 여기에서는 하나의 단위/참조 프레임에서 포인트를 다른 것으로 변환하는 방법을 설명합니다. 여기

일부 코드는 다음을 입증한다 :

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

이 스크립트의 출력은 다음

enter image description here

이 다음 (소)도 초래

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.] 

더 큰 예제에서 볼 수 있습니다 (SCALE은 4로 설정 됨) : enter image description here

+0

감사합니다. Yann, 저에게 보일 장소를 주었고 매우 유망 해 보였습니다. –

관련 문제