如何在Plotly多子图/分面图中添加动态水平线?
为各股票子图添加对应起始价格水平线
完全可行,以下是实现步骤和代码:
核心思路
- 获取未基准化的原始股票数据:去掉原代码中的
indexed=True,得到各股票的真实价格 - 提取每个公司股票的起始价格(对应列的第一行数值)
- 遍历每个子图,为对应公司添加专属的起始价格水平线
完整代码
import plotly.express as px # 获取未基准化的原始股票数据 df = px.data.stocks() df = df.set_index('date') # 创建分面子图 fig = px.line(df, facet_col="company", facet_col_wrap=2) # 为每个公司子图添加对应起始价格的水平线 for company in df.columns: # 获取该公司股票的起始价格 start_price = df[company].iloc[0] # 计算子图对应的列索引(Plotly子图col从1开始计数) col_idx = list(df.columns).index(company) + 1 # 确定子图所在行(因facet_col_wrap=2,前2个在第一行,后2个在第二行) row_idx = 1 if col_idx <= 2 else 2 fig.add_hline( y=start_price, line_dash="dot", row=row_idx, col=col_idx, annotation_text=f"起始价: {start_price:.2f}", annotation_position="top right", annotation_font_size=10 ) fig.show()
关键说明
df[company].iloc[0]精准提取每个公司股票的首个交易日价格- 通过
row和col参数精准控制水平线添加到对应子图,避免全局添加 - 可选添加
annotation_text参数,让水平线的含义更直观
内容的提问来源于stack exchange,提问作者paulb_82
相关产品推荐
相关产品推荐

