2011-10-05 50 views
15

私は数千点の散布図を持っています。Matplotlib:マウスオーバー時のラベルポイント

Matplotlib: How to put individual tags for a scatter plot

しかし、それは非常に多くのポイントでの災害のようになります。この投稿は、それらをラベル付けする方法を私に伝えます。私が代わりにしたいのは、ポイントをマウスオーバーするとポップアップする「ツールチップ」タイプのラベルを付けることです。それはmatplotlibを使って可能ですか?

+5

[Joe KingtonのDataCursor](http://stackoverflow.com/questions/4652439/is-there-a-matplotlib-equivalent-of-matlabs-datacursormode/4674445#4674445)を使用すると、いつでもポップアップツールチップを表示できますポイントをクリックします。 – unutbu

答えて

6

ポイントの座標を取得すると、ツールバーのtextctrlにポイントまたはオブジェクトリンク情報を表示できます。このためには、キャンバスにツールバー(NavigationToolbar2Wx())をインスタンス化し、そこにtextcontrolを追加する必要があります。これはポップアップほど素晴らしいものではありませんが、それは仕事です。

ここでは、(だけのx 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() 

そして、ここでは、ツールバーに新しいコントロールを見ることができます:

enter image description here

+0

この 'matplotlib'関連の質問を見ていただければ幸いです。 https://stackoverflow.com/questions/45398699/python-how-to-plot-the-predictor-and-predicted-value-in-the-same-graph – Mahsolid

関連する問題