xlabel - plt.legend python
Matplotlib: puntos de etiqueta en mouseover (1)
Una vez que obtenga las coordenadas del punto, puede mostrarlas o cualquier información vinculada a un objeto en un textctrl en la barra de herramientas. Para esto, debe crear una instancia de una barra de herramientas (NavigationToolbar2Wx ()) en su lienzo y agregar allí el control de texto. Esto no es tan bueno como una ventana emergente, pero cumple su función.
Aquí tiene un ejemplo de personalización de su barra de herramientas (solo muestra la coordenada x en el txtctrl):
#!/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()
Y aquí puede ver el nuevo control en la barra de herramientas:
Tengo un diagrama de dispersión con varios miles de puntos. Esta publicación me dice cómo etiquetarlos:
Matplotlib: Cómo poner etiquetas individuales para un diagrama de dispersión
Pero eso se verá como un desastre con tantos puntos. Lo que me gustaría, en cambio, es tener una etiqueta de tipo "punta de herramienta" que aparece cuando mueves el cursor sobre un punto. ¿Es posible usar matplotlib?