2011-10-05 12 views
15

मेरे पास कई हज़ार अंक के साथ एक स्कैटर प्लॉट है। इस पोस्ट में मुझसे कहता है उन्हें लेबल के लिए कैसे:Matplotlib: माउसओवर पर लेबल पॉइंट

Matplotlib: How to put individual tags for a scatter plot

लेकिन है कि इतने सारे अंक के साथ एक आपदा की तरह दिखाई देगा। इसके बजाय मैं एक "टूल टिप" प्रकार का लेबल रखना चाहता हूं जो एक बिंदु को माउसओवर करते समय पॉप अप करता है। क्या यह matplotlib का उपयोग कर संभव है?

+5

जब भी आप पॉपअप टूल-टिप दिखाने के लिए [जो किंगटन के डेटा कर्सर] का उपयोग कर सकते हैं (http://stackoverflow.com/questions/4652439/is-there-a-matplotlib-equivalent-of-matlabs-datacursormode/4674445#4674445) आप एक बिंदु पर क्लिक करें। – unutbu

उत्तर

6

एक बार जब आप बिंदु के तार प्राप्त करते हैं तो आप टूलबार में टेक्स्टक्लर में उन्हें या किसी ऑब्जेक्ट-लिंक्ड जानकारी को दिखा सकते हैं। इसके लिए आपको अपने कैनवास में टूलबार (NavigationToolbar2Wx()) को तुरंत चालू करना होगा और वहां टेक्स्ट कंट्रोल जोड़ना होगा। यह पॉपअप के रूप में उतना अच्छा नहीं है लेकिन यह काम करता है।

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 
# 
""" 
jvisor_spectrum_panel (visor_07) 
25 julio 2010 
""" 
# 
import wx 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 
# 
# 
class SpectrumPanel(wx.Panel): 
    def __init__(self, parent, xlabel='m/z', ylabel='Intensity'): 
     wx.Panel.__init__(self, parent) 
     # 
     self.parent = parent 
     self.xlabel = xlabel 
     self.ylabel = ylabel 
     self.SetBackgroundColour("white") 
     # 
     self.figure = Figure() 
     self.canvas = FigureCanvas(self, -1, self.figure) 
     # 
     self.add_toolbar() 
     # 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP| wx.GROW| wx.EXPAND) 
     sizer.Add(self.toolbar, 0, wx.LEFT) 
     self.canvas.mpl_connect('motion_notify_event', self.on_motion) 
     self.SetSizer(sizer) 
     self.Fit() 
     self.clean() 
    # 
    def add_toolbar(self): 
     "" 
     self.toolbar = NavigationToolbar2Wx(self.canvas) 

     mass_txt = wx.StaticText(self.toolbar, label='m/z', pos=(230, 7), 
                  size=(25, 17)) 
     mass_txt.SetBackgroundColour("light gray") 
     self.mass = wx.TextCtrl(self.toolbar, pos=(260,4), size=(50, 22), 
                  style=wx.TE_READONLY) 
     # 
     self.toolbar.SetToolBitmapSize(wx.Size(24, 25)) 
     self.toolbar.SetMinSize((1500, 31)) 
     self.toolbar.Realize() 
     self.toolbar.Update() 
    # 
    def clean(self): 
     "" 
     self.figure.clear() 
     self.axes = self.figure.add_subplot(111) 
    # 
    def dibuja(self): 
     "dibuja el canvas" 
     self.axes.set_xlabel(self.xlabel) 
     self.axes.set_ylabel(self.ylabel) 
     self.canvas.draw() 
    # 
    def on_motion(self, evt): 
     if evt.inaxes: 
      xpos = evt.xdata 
      self.mass.SetValue(' %0.1f' % (xpos)) 


if __name__ == '__main__': 
    "" 
    class TestFrame(wx.Frame): 
     def __init__(self, *args, **kargs): 
      wx.Frame.__init__(self, *args, **kargs) 
      self.panel = SpectrumPanel(self) 
      self.Fit() 
    #   
    app = wx.PySimpleApp() 
    fr = TestFrame(None) 
    fr.Show() 
    app.MainLoop() 

और यहाँ आप उपकरण पट्टी में नए नियंत्रण देख सकते हैं::

enter image description here

यहाँ आप अपने उपकरण पट्टी को अनुकूलित (केवल दिखा एक्स txtctrl में समन्वय) का एक उदाहरण है

+0

यदि आप इस 'matplotlib' से संबंधित प्रश्न को देख सकते हैं तो मैं सराहना करता हूं। https://stackoverflow.com/questions/45398699/python-how-to-plot-the-predictor-and-predicted-value-in-the-same-graph – Mahsolid