Matplotlib: Label points on mouseover Matplotlib: Label points on mouseover python python

Matplotlib: Label points on mouseover


Once you get the coords of the point you can show them or any object-linked info in a textctrl in the toolbar. For this you have to instantiate a toolbar (NavigationToolbar2Wx()) in your canvas and add the textcontrol there. This is not as nice as a popup but it does the job.

Here you have an example of customizing your toolbar (only showing the x coordinate in the txtctrl):

#!/usr/bin/env python#-*- coding: utf-8 -*-#"""jvisor_spectrum_panel (visor_07)25 julio 2010"""#import wxfrom matplotlib.figure import Figurefrom matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvasfrom 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()

And here you can see the new control in the toolbar:

enter image description here