# 光标演示 此示例显示如何使用matplotlib提供数据游标。 它使用matplotlib来绘制光标并且可能很慢,因为这需要在每次鼠标移动时重新绘制图形。 使用本机GUI绘图可以更快地进行镜像,就像在wxcursor_demo.py中一样。 mpldatacursor和mplcursors第三方包可用于实现类似的效果。参看这个: https://github.com/joferkington/mpldatacursor https://github.com/anntzer/mplcursors ```python import matplotlib.pyplot as plt import numpy as np class Cursor(object): def __init__(self, ax): self.ax = ax self.lx = ax.axhline(color='k') # the horiz line self.ly = ax.axvline(color='k') # the vert line # text location in axes coords self.txt = ax.text(0.7, 0.9, '', transform=ax.transAxes) def mouse_move(self, event): if not event.inaxes: return x, y = event.xdata, event.ydata # update the line positions self.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 point For simplicity, I'm assuming x is sorted """ def __init__(self, ax, x, y): self.ax = ax self.lx = ax.axhline(color='k') # the horiz line self.ly = ax.axvline(color='k') # the vert line self.x = x self.y = y # text location in axes coords self.txt = ax.text(0.7, 0.9, '', transform=ax.transAxes) def mouse_move(self, event): if not event.inaxes: return x, y = event.xdata, event.ydata indx = min(np.searchsorted(self.x, [x])[0], len(self.x) - 1) x = self.x[indx] y = self.y[indx] # update the line positions self.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() ``` ## 下载这个示例 - [下载python源码: cursor_demo_sgskip.py](https://matplotlib.org/_downloads/cursor_demo_sgskip.py)