2010-12-15 8 views
10

일부 선분 (LineCollection)과 일부 점이있는 그래프가 있습니다. 이 선과 점에는 그래프로 표시되지 않은 일부 값이 있습니다. 마우스 오버 도구 팁이나 점과 선에 대한 관련 값을 쉽게 찾을 수있는 다른 방법을 추가하고 싶습니다. 이 점 또는 선분 세그먼트 가능합니까?matplotlib의 점 및 선 도구 설명?

+2

를 ([여기하기 matplotlib에서 하나의 예입니다] http://matplotlib.sourceforge.net/ examples/pylab_examples/cursor_demo.html). Google에서 찾았습니다. [다음은 또 다른 인기있는 SO 답변입니다.] (http://stackoverflow.com/a/4674445/1020470) [글쎄, 이것도 matplotlib 예제를 가리 킵니다.] (http://stackoverflow.com/ a/7909589/1020470) –

답변

6

포인트, 나는 방법을 발견했다, 그러나 당신은 WX 백엔드

"""Example of how to use wx tooltips on a matplotlib figure window. 
Adapted from http://osdir.com/ml/python.matplotlib.devel/2006-09/msg00048.html""" 

import matplotlib as mpl 
mpl.use('WXAgg') 
mpl.interactive(False) 

import pylab as pl 
from pylab import get_current_fig_manager as gcfm 
import wx 
import numpy as np 
import random 


class wxToolTipExample(object): 
    def __init__(self): 
     self.figure = pl.figure() 
     self.axis = self.figure.add_subplot(111) 

     # create a long tooltip with newline to get around wx bug (in v2.6.3.3) 
     # where newlines aren't recognized on subsequent self.tooltip.SetTip() calls 
     self.tooltip = wx.ToolTip(tip='tip with a long %s line and a newline\n' % (' '*100)) 
     gcfm().canvas.SetToolTip(self.tooltip) 
     self.tooltip.Enable(False) 
     self.tooltip.SetDelay(0) 
     self.figure.canvas.mpl_connect('motion_notify_event', self._onMotion) 

     self.dataX = np.arange(0, 100) 
     self.dataY = [random.random()*100.0 for x in xrange(len(self.dataX))] 
     self.axis.plot(self.dataX, self.dataY, linestyle='-', marker='o', markersize=10, label='myplot') 

    def _onMotion(self, event): 
     collisionFound = False 
     if event.xdata != None and event.ydata != None: # mouse is inside the axes 
      for i in xrange(len(self.dataX)): 
       radius = 1 
       if abs(event.xdata - self.dataX[i]) < radius and abs(event.ydata - self.dataY[i]) < radius: 
        top = tip='x=%f\ny=%f' % (event.xdata, event.ydata) 
        self.tooltip.SetTip(tip) 
        self.tooltip.Enable(True) 
        collisionFound = True 
        break 
     if not collisionFound: 
      self.tooltip.Enable(False) 



example = wxToolTipExample() 
pl.show() 
+1

enthought가 다음과 같은 기능을보다 일반적으로 지원한다면 매우 유용 할 것입니다 ... – aestrivex

1

아마도 this recipe에 변화가이 점에 대해 원하는 것을 할 것을 사용할 필요가? 적어도 wx 백엔드에만 국한되지 않습니다.

2

그것은 오래된 스레드하지만 경우에 사람이 라인에 툴팁을 추가하는 방법을 찾고,이 작품 :

import matplotlib.pyplot as plt 
import numpy as np 
import mpld3 

f, ax = plt.subplots() 
x1 = np.array([0,100], int) 
x2 = np.array([10,110], int) 
y = np.array([0,100], int) 

line = ax.plot(x1, y) 
mpld3.plugins.connect(f, mpld3.plugins.LineLabelTooltip(line[0], label='label 1')) 

line = ax.plot(x2, y) 
mpld3.plugins.connect(f, mpld3.plugins.LineLabelTooltip(line[0], label='label 2')) 

mpld3.show()