2011-11-01 5 views
14

आर में, एक समारोह locator है जो मैटलैब के ginput जैसा है जहां आप माउस के साथ आकृति पर क्लिक कर सकते हैं और किसी एक्स, वाई समन्वय का चयन कर सकते हैं। इसके अलावा, identify(x,y) नामक एक फ़ंक्शन है जहां आप इसे पॉइंट्स एक्स का एक सेट देते हैं, जिसे आपने प्लॉट किया है और फिर आकृति पर क्लिक करें, यह एक्स, वाई पॉइंट की अनुक्रमणिका को वापस कर देगा जो एक निकट समायोज्य है सहिष्णुता) आपके द्वारा चुने गए स्थान पर (या एकाधिक सूचकांक, यदि एकाधिक बिंदु चुने गए हैं)। Matplotlib में ऐसी कार्यक्षमता है?matplotlib - अंतःक्रियात्मक बिंदु या स्थानों का चयन करें?

+1

FWIW: 'iplots' पैकेज में भी नहीं है' iselect() ' (आर के लिए)। यह एक सामान्यीकरण है: इसमें लिंकिंग और ब्रशिंग शामिल है। मैटलैब में 'get (,' ब्रशडाटा ')' फ़ंक्शन के माध्यम से भी किया जा सकता है। – Iterator

+0

दाएं, और रग्बी भी। लेकिन मुझे इसके लिए मैटलैब की क्षमता से अवगत नहीं था - पिछली बार मैंने इसका इस्तेमाल संस्करण 6.5 के दिनों में किया था। तब से कल्पना प्राप्त हुई है। – hatmatrix

+2

फैंसी और मूल्यवान। पिछले दशक में आर की लागत भी तीन गुना हो गई है, लेकिन यह एक सौदा बनी हुई है। :) – 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

यदि आप भविष्य से प्रिंट फ़ंक्शन आयात करते हैं तो आपको ब्रैकेट जोड़ना होगा: प्रिंट ('एक्स =' + str (np.take (xdata, ind) [0])) –

संबंधित मुद्दे