如何在画图时画一条跟随鼠标移动的平行与y轴的虚线,虚线会显示与我画的二条折线相交时折线上的x值和y值,要显示两条线相交的值
时间: 2023-11-28 10:49:07 浏览: 85
你可以使用 Python 中的 Matplotlib 库来绘制图形,并使用交互式模式实现跟随鼠标移动的虚线。下面是一个简单的示例代码,它可以绘制两条折线和跟随鼠标移动的平行于 y 轴的虚线,当虚线与折线相交时,会在图形上显示相交点的坐标。
```python
import matplotlib.pyplot as plt
x1 = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 4, 6]
x2 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
fig, ax = plt.subplots()
line1, = ax.plot(x1, y1, 'bo-', label='Line 1')
line2, = ax.plot(x2, y2, 'rs--', label='Line 2')
# 定义一个跟随鼠标移动的虚线
vert_line = ax.axvline(x=0, color='gray', alpha=0.5, linestyle='--')
# 显示相交点的坐标
text = ax.text(0.5, 0.9, '', transform=ax.transAxes)
def on_move(event):
# 更新虚线的位置
if event.inaxes == ax:
x = event.xdata
vert_line.set_xdata(x)
fig.canvas.draw_idle()
# 判断虚线是否与折线相交
x1, y1 = line1.get_data()
x2, y2 = line2.get_data()
for i in range(len(x1) - 1):
if x >= min(x1[i], x1[i+1]) and x <= max(x1[i], x1[i+1]):
y = (y1[i+1] - y1[i]) / (x1[i+1] - x1[i]) * (x - x1[i]) + y1[i]
text.set_text(f"x={x:.2f}, y={y:.2f}")
text.set_position((0.5, 0.9))
fig.canvas.draw_idle()
return
if x >= min(x2[i], x2[i+1]) and x <= max(x2[i], x2[i+1]):
y = (y2[i+1] - y2[i]) / (x2[i+1] - x2[i]) * (x - x2[i]) + y2[i]
text.set_text(f"x={x:.2f}, y={y:.2f}")
text.set_position((0.5, 0.9))
fig.canvas.draw_idle()
return
text.set_text('')
fig.canvas.draw_idle()
# 注册鼠标移动事件
fig.canvas.mpl_connect('motion_notify_event', on_move)
ax.legend()
plt.show()
```
运行上述代码,会弹出一个窗口,显示两条折线和跟随鼠标移动的虚线。当虚线与某条折线相交时,图形上会显示相交点的坐标。
阅读全文