2017-02-23 30 views
2

matplotlibプロットスケールに従った変数にマウスx、y座標を取得しようとしましたが、0.0または1.0のような整数コンポーネントを返すだけです ここでは0.1245 のような正確な数は私のコードgetマウスのクリックでmatplotlibプロットフィギュア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

これは興味深いことです。私はこれをPython 3で試しています。マイナーチェンジ( 'Tkinter' - >' tkinter'、文字列のフォーマットと 'def onclick(self、event)' - > 'def onclick(event)')完全に正確な結果。 – TidB

+0

actualy yes python 3はpythonといくつかのマイナーチェンジが異なります。返信ありがとう:) –

答えて

0

で返しますなって正確な結果であり、ixiyが希望の精度で浮動小数点数です。問題は

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

%dでフォーマットされ数は整数として表示されなければならない、とまさにそれがここで起こっていることを意味しています。あなたは浮動小数点表現のための%fを試してみる場合:

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

あなたが正確な結果を取得していることがわかります。

+0

ありがとうございました! –