光标演示
此示例显示如何使用matplotlib提供数据游标。 它使用matplotlib来绘制光标并且可能很慢,因为这需要在每次鼠标移动时重新绘制图形。
使用本机GUI绘图可以更快地进行镜像,就像在wxcursor_demo.py中一样。
mpldatacursor和mplcursors第三方包可用于实现类似的效果。参看这个:
https://github.com/joferkington/mpldatacursor https://github.com/anntzer/mplcursors
import matplotlib.pyplot as pltimport numpy as npclass Cursor(object):def __init__(self, ax):self.ax = axself.lx = ax.axhline(color='k') # the horiz lineself.ly = ax.axvline(color='k') # the vert line# text location in axes coordsself.txt = ax.text(0.7, 0.9, '', transform=ax.transAxes)def mouse_move(self, event):if not event.inaxes:returnx, y = event.xdata, event.ydata# update the line positionsself.lx.set_ydata(y)self.ly.set_xdata(x)self.txt.set_text('x=%1.2f, y=%1.2f' % (x, y))plt.draw()class SnaptoCursor(object):"""Like Cursor but the crosshair snaps to the nearest x,y pointFor simplicity, I'm assuming x is sorted"""def __init__(self, ax, x, y):self.ax = axself.lx = ax.axhline(color='k') # the horiz lineself.ly = ax.axvline(color='k') # the vert lineself.x = xself.y = y# text location in axes coordsself.txt = ax.text(0.7, 0.9, '', transform=ax.transAxes)def mouse_move(self, event):if not event.inaxes:returnx, y = event.xdata, event.ydataindx = min(np.searchsorted(self.x, [x])[0], len(self.x) - 1)x = self.x[indx]y = self.y[indx]# update the line positionsself.lx.set_ydata(y)self.ly.set_xdata(x)self.txt.set_text('x=%1.2f, y=%1.2f' % (x, y))print('x=%1.2f, y=%1.2f' % (x, y))plt.draw()t = np.arange(0.0, 1.0, 0.01)s = np.sin(2 * 2 * np.pi * t)fig, ax = plt.subplots()# cursor = Cursor(ax)cursor = SnaptoCursor(ax, t, s)plt.connect('motion_notify_event', cursor.mouse_move)ax.plot(t, s, 'o')plt.axis([0, 1, -1, 1])plt.show()
