2017-02-23 7 views
2

matplotlib 플롯 스케일에 따라 마우스 x, y 좌표를 픽셀로 가져 오려고했지만 0.0 또는 1.0과 같은 정수 구성 요소 만 리턴합니다. 0.1245 처럼 정확한 수를 반환하는 것은 여기에 내 코드 정확한 결과를 얻기get matplotlib plot figure python 마우스 클릭으로 좌표 얻기

import matplotlib 
import Tkinter as tk 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 
import numpy as np 
import matplotlib.pyplot as plt 


def onclick(self,event): 
    ix, iy = float(event.xdata), float(event.ydata) 

    print 'x = %d, y = %d' % (
     ix, iy) 



root = tk.Tk() 
circle1 = plt.Circle((0, 0), 1, color='blue') 

f = plt.figure() 
a = f.add_subplot(111) 
f, a = plt.subplots() 
a.add_artist(circle1) 
a.set_xlim(-1.1, +1.1) 
a.set_ylim(-1.1, +1.1) 

#a.plot(circle1) 
canvas = FigureCanvasTkAgg(f, master=root) 
canvas.show() 
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) 

canvas.mpl_connect('button_press_event', onclick) 

canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1) 

root.mainloop() 
+0

재미 있습니다. 파이썬 3에서 이것을 시도하고 있는데, 약간의 변경 ('Tkinter' ->'tkinter', 문자열 포맷팅과'def onclick (self, event)'-''def onclick (event)')을 제외하고는, 완벽하게 정확한 결과. – TidB

+0

actualy yes 파이썬 3은 파이썬과 약간의 차이점이 있습니다. 답장을 보내 주셔서 감사합니다. :) –

답변

0

당신 있습니다이며, ixiy 원하는 정확도 수레입니다. 문제는

print 'x = %d, y = %d' % (ix, iy) 

%d의 형식입니다 숫자가 정수로 표시해야하며, 정확히 여기에 무슨 일이 일어나고 있음을 의미한다. 당신이 부동 소수점 표현에 대한 %f을 시도하는 경우 :

print 'x = %f, y = %f' % (ix, iy) 

당신은 당신이 정확한 결과를 얻고있는 것을 볼 수 있습니다.

+0

감사합니다. –