如何在Plotly中为双列表绘制的曲线添加交点标注?
实现方案
要在Plotly双曲线(共用X轴)的交点处添加标注,分两步执行:计算交点坐标,再在图表中添加标注。
1. 计算两条曲线的交点
两组数据的X值通常不会完全一一对应,需要通过插值方式定位精确交点,这里用numpy实现:
import numpy as np # 替换成你的实际数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = 0.5*x - 2 # 找出曲线差值符号变化的区间(交点所在区间) diff = y1 - y2 sign_change_indices = np.where(np.diff(np.sign(diff)))[0] # 对每个区间插值计算精确交点坐标 intersections = [] for idx in sign_change_indices: x_interp = np.interp(0, [diff[idx], diff[idx+1]], [x[idx], x[idx+1]]) y_interp = np.interp(x_interp, x, y1) intersections.append((x_interp, y_interp))
2. 在Plotly中添加交点标注
用Plotly的add_annotation方法,为每个交点添加带箭头的标注:
import plotly.graph_objects as go # 创建基础双曲线图表 fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=y1, name='曲线1')) fig.add_trace(go.Scatter(x=x, y=y2, name='曲线2')) # 遍历交点添加标注 for x_coord, y_coord in intersections: fig.add_annotation( x=x_coord, y=y_coord, text=f"交点<br>({x_coord:.2f}, {y_coord:.2f})", showarrow=True, arrowhead=2, ax=0, ay=-40 # 控制箭头偏移,避免遮挡曲线 ) # 调整图表布局 fig.update_layout(title='带交点标注的双曲线', xaxis_title='X轴', yaxis_title='Y轴') fig.show()
注意事项
- 如果你的数据是离散非均匀X值,只需替换示例中的
x、y1、y2为实际数组,插值逻辑通用。 - 可自定义标注的
text、arrowhead、ax/ay等参数,调整标注样式和位置。
内容的提问来源于stack exchange,提问作者BobMacTochas
相关产品推荐
相关产品推荐

