现在我使用matploylib画了一个图,加一个功能,跟随鼠标显示线上点的值,不显示空白出的y值,完整代码
时间: 2023-10-08 15:10:11 浏览: 109
以下是一个完整的例子,它使用Matplotlib绘制正弦曲线,并在鼠标移动时在曲线上显示点的值:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# 创建一个图形窗口
fig, ax = plt.subplots()
# 绘制正弦曲线
line, = ax.plot(x, y)
# 创建一个文本框用于显示点的值
annotation = ax.annotate("", xy=(0,0), xytext=(-20,20), textcoords="offset points",
bbox=dict(boxstyle="round", fc="w"),
arrowprops=dict(arrowstyle="->"))
# 隐藏文本框
annotation.set_visible(False)
def update_annot(ind):
"""更新文本框的内容"""
pos = line.get_ydata()[ind["ind"][0]]
annotation.xy = (ind["xy"][0], pos)
annotation.set_text(f"({ind['xy'][0]:.2f}, {pos:.2f})")
def hover(event):
"""鼠标移动时显示点的值"""
if event.inaxes == ax:
x, y = event.xdata, event.ydata
ind = np.argmin(np.abs(line.get_xdata()-x))
update_annot({"ind": [ind], "xy": (x, y)})
annotation.set_visible(True)
fig.canvas.draw_idle()
else:
annotation.set_visible(False)
fig.canvas.draw_idle()
# 注册鼠标移动事件
fig.canvas.mpl_connect("motion_notify_event", hover)
# 显示图形
plt.show()
```
该代码生成一个正弦曲线,并在鼠标移动时在曲线上显示点的值。在显示点的值时,该代码不会显示空白出的y值。
阅读全文