2011-11-01 14 views
14

Rでは、Matlabのginputのような関数locatorがあります。ここでマウスで図をクリックして任意のx、y座標を選択できます。さらに、identify(x,y)と呼ばれる関数があります。プロットしたポイントx、yのセットを与えてからFigureをクリックすると、最も近くにあるx、yポイントのインデックスが返されます選択した場所(または複数のポイントが選択されている場合は複数のインデックス)に移動します。 Matplotlibにそのような機能はありますか?matplotlib - インタラクティブにポイントまたは位置を選択しますか?

+1

FWIW: 'iselectは()' 'iplots'パッケージでもありますが(Rの場合)。これは一般化されています。リンクとブラッシングが必要です。 Matlabの 'get(、 'BrushData')関数を使って同じことができます。 – Iterator

+0

右、Rggobiも同様です。しかし、私はMatlabのこの機能を認識していませんでした。最後に集中的に使用したのは、バージョン6.5の時代でした。それ以来、魅力的だったようです。 – hatmatrix

+2

ファンシーで高価です。過去10年間にRのコストも3倍になりましたが、引き続きお買い得です。 :) – Iterator

答えて

12

あなたがpick event使用することもできます。そこピッカーパラメータで設定

fig = figure() 
ax1 = fig.add_subplot(111) 
ax1.set_title('custom picker for line data') 
line, = ax1.plot(rand(100), rand(100), 'o', picker=line_picker) 
fig.canvas.mpl_connect('pick_event', onpick2) 

公差:

line, = ax1.plot(rand(100), 'o', picker=5) # 5 points tolerance 
+0

はい、これは素晴らしいです - ありがとう! – hatmatrix

5
from __future__ import print_function 
import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D 
from matplotlib.patches import Rectangle 
from matplotlib.text import Text 
from matplotlib.image import AxesImage 
import numpy as np 
from numpy.random import rand 

if 1: 
    fig, ax = plt.subplots() 
    ax.set_title('click on points', picker=True) 
    ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red')) 
    line, = ax.plot(rand(100), 'o', picker=5) 

    def onpick1(event): 
     if isinstance(event.artist, Line2D): 
      thisline = event.artist 
      xdata = thisline.get_xdata() 
      ydata = thisline.get_ydata() 
      ind = event.ind 
      print 'X='+str(np.take(xdata, ind)[0]) # Print X point 
      print 'Y='+str(np.take(ydata, ind)[0]) # Print Y point 

    fig.canvas.mpl_connect('pick_event', onpick1) 
+2

将来印刷機能をインポートする場合は、ブラケットを追加する必要があります。print( 'X =' + str(np.take(xdata、ind)[0])) –

関連する問題