You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Plotly在同一页面垂直展示多只股票K线分析图?

解决方案:用Plotly子图垂直排列多只股票的K线+VWAP图

要实现多只股票的K线图(带VWAP)垂直排列在同一页面,核心是使用Plotly的make_subplots创建垂直子图布局,然后在循环中为每个子图添加蜡烛图和VWAP线。以下是完整可运行的代码示例:

步骤说明

  1. 导入必要库,包括make_subplots用于创建子图
  2. 定义股票列表(模拟从CSV读取的股票名称、起止日期)
  3. 创建对应数量的垂直子图
  4. 循环处理每只股票,计算VWAP并在对应子图中添加蜡烛图和VWAP线
  5. 调整布局细节,优化显示效果

完整代码

import yfinance as yf
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 模拟从CSV读取的股票数据:列表中每个元素是(股票代码, 起始日期, 结束日期)
stocks_info = [
    ("AAPL", "2022-04-15", "2022-07-15"),
    ("MSFT", "2022-04-15", "2022-07-15"),
    ("TSLA", "2022-04-15", "2022-07-15")
]

# 创建垂直子图:行数等于股票数量,列数为1
fig = make_subplots(
    rows=len(stocks_info),
    cols=1,
    subplot_titles=[stock[0] for stock in stocks_info],  # 每个子图的标题为股票代码
    vertical_spacing=0.05  # 子图之间的垂直间距,可根据需求调整
)

for idx, (stock, start_date, end_date) in enumerate(stocks_info, start=1):
    # 下载股票数据
    df = yf.download(stock, start=start_date, end=end_date, interval="1h")
    
    # 计算VWAP
    tp = (df['Low'] + df['Close'] + df['High']) / 3
    df['vwap'] = (tp * df['Volume']).cumsum() / df['Volume'].cumsum()
    
    # 添加蜡烛图到对应子图
    fig.add_trace(
        go.Candlestick(
            x=df.index,
            open=df['Open'],
            high=df['High'],
            low=df['Low'],
            close=df['Close'],
            name=f"{stock} K线"
        ),
        row=idx,
        col=1
    )
    
    # 添加VWAP线到对应子图
    fig.add_trace(
        go.Scatter(
            x=df.index,
            y=df['vwap'],
            mode='lines',
            name=f"{stock} VWAP",
            line=dict(color='royalblue', width=2)
        ),
        row=idx,
        col=1
    )

# 调整布局:隐藏重复的图例,设置整体标题,优化x轴显示
fig.update_layout(
    height=300 * len(stocks_info),  # 整体高度:每个子图分配300px高度
    title_text="多只股票K线图(带VWAP分析)",
    showlegend=False  # 关闭图例,避免重复显示
)

# 调整每个子图的x轴为时间格式
fig.update_xaxes(
    type='date',
    tickformat='%Y-%m-%d %H:%M',
    row='all',
    col=1
)

# 显示图表
fig.show()

关键注意点

  • make_subplots的rows参数必须与股票数量一致,确保每个股票对应一个子图
  • 每次添加trace时必须指定row和col,否则会默认添加到第一个子图
  • 通过vertical_spacing调整子图之间的间距,避免图表重叠
  • 整体高度可以根据子图数量动态设置,保证每个图表有足够的显示空间

内容的提问来源于stack exchange,提问作者Fchpro01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:18:26