Bazı çizgi parçalarına (LineCollection) ve bazı noktalara sahip bir grafikim var. Bu çizgiler ve noktalar, onlarla ilişkili olmayan, grafik olmayan bazı değerlere sahiptir. Nokta ve çizgi için ilgili değeri kolayca bulmak için bir fare-over araç ipucu veya başka bir yöntem ekleyebilmek istiyorum. Bu nokta veya çizgi segmentleri için mümkün mü?Matplotlib'deki nokta ve çizgi araç ipuçları?
10
A
cevap
6
puan için, ben bir yol bulduk, ancak WX arka uç
"""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
Daha genel olarak bileşenler için böyle bir özelliği desteklemiş olsaydı çok güzel olurdu. – aestrivex
1
Belki this recipe bir varyasyon puan için istediğini yapacağını kullanmak zorunda? En azından wx arka ucuyla sınırlı değil.
2
Bu eski iplik, ama durumda herkes hatlarına ipuçlarını nasıl ekleneceği arıyor, bu çalışır:
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()
([Burada matplotlib itibaren bir örnek] http://matplotlib.sourceforge.net/ Google'da bulduğum örnekler/pylab_examples/cursor_demo.html). [İşte bir başka popüler SO cevabı.] (Http://stackoverflow.com/a/4674445/1020470) [Peki, bu da matplotlib örneğini işaret eder.] (Http://stackoverflow.com/ a/7909589/1020470) –