求助:Python Plotly多股票时序图实现水平滚动与系列切换
Plotly 多股票时序图:水平滚动+系列切换简易实现
以下是满足需求的极简示例,包含两只股票的价格时序展示,同时支持水平滚动和点击图例切换股票显示/隐藏,代码结构清晰,可轻松扩展到3-6只股票:
import numpy as np import pandas as pd import plotly.graph_objects as go # 生成模拟股票数据(两只股票,200个交易日) np.random.seed(42) n_periods = 200 dates = pd.date_range(start='2020-01-01', periods=n_periods) # 生成两只股票的累计收益模拟价格 stock_a = 100 + np.cumsum(np.random.normal(0, 1, n_periods)) stock_b = 120 + np.cumsum(np.random.normal(0, 1.2, n_periods)) # 创建Plotly图表对象 fig = go.Figure() # 添加股票A的时序曲线 fig.add_trace(go.Scatter( x=dates, y=stock_a, name='股票A', line=dict(color='#1f77b4') )) # 添加股票B的时序曲线 fig.add_trace(go.Scatter( x=dates, y=stock_b, name='股票B', line=dict(color='#ff7f0e') )) # 配置布局:启用水平滚动+设置样式 fig.update_layout( title='股票价格时序图', xaxis=dict( title='日期', # 启用水平滚动条 rangeslider=dict(visible=True), # 可选:添加快速时间范围选择器 rangeselector=dict( buttons=list([ dict(count=1, label='1月', step='month', stepmode='backward'), dict(count=3, label='3月', step='month', stepmode='backward'), dict(count=6, label='6月', step='month', stepmode='backward'), dict(step='all', label='全部') ]) ) ), yaxis=dict(title='价格'), showlegend=True, # 显示图例,用于切换股票显示/隐藏 height=600 ) # 显示图表 fig.show()
关键功能说明
- 水平滚动:通过
xaxis.rangeslider=dict(visible=True)启用底部的水平滚动条,拖动即可查看不同时间段的数据;额外添加的rangeselector可以快速切换时间范围(比如查看最近1/3/6个月数据)。 - 系列切换:Plotly默认支持点击图例中的股票名称,即可切换对应股票曲线的显示/隐藏状态,无需编写复杂的按钮逻辑,操作直观。
扩展到3-6只股票的方法
如果需要添加更多股票,只需:
- 生成对应股票的价格数据(比如新增
stock_c、stock_d等); - 重复调用
fig.add_trace(go.Scatter(...))添加新的曲线,设置不同的name和颜色即可。
内容的提问来源于stack exchange,提问作者intrigued_66
相关产品推荐
相关产品推荐

