如何在Plotly与Pandas中为第二张子图添加次坐标轴?
Plotly 第二张子图添加次坐标轴的解决方案
问题原因
你之前的代码报错是因为specs参数的结构和子图行列数不匹配:当设置rows=2, cols=1时,specs需要是一个2行1列的嵌套列表,每个子图对应一个配置字典,而你只写了一行配置,导致结构不兼容。
正确实现步骤
1. 正确初始化带次坐标轴的子图
通过specs参数为第二张子图单独启用次坐标轴,第一张子图保持默认配置:
from plotly.subplots import make_subplots import pandas as pd import numpy as np # 生成示例数据(可替换为你的真实数据) np.random.seed(42) df = pd.DataFrame({ '主轴数据1': np.random.randn(100).cumsum(), '主轴数据2': np.random.randn(100).cumsum() + 5, '次轴数据': np.random.randn(100).cumsum() * 100 }) # 初始化2行1列子图,仅第二张子图启用次坐标轴 fig = make_subplots(rows=2, cols=1, specs=[[{}], [{'secondary_y': True}]])
2. 将Pandas生成的图表trace添加到对应位置
添加trace时,需要通过row指定子图行号,secondary_y指定是否使用次坐标轴:
# 用Plotly作为Pandas绘图后端生成图表 fig1 = df.plot(backend='plotly') # 把前两个trace添加到第二张子图的主坐标轴 for trace in fig1.data[:2]: fig.add_trace(trace, row=2, col=1, secondary_y=False) # 把第三个trace添加到第二张子图的次坐标轴 fig.add_trace(fig1.data[2], row=2, col=1, secondary_y=True) # (可选)给第一张子图添加示例数据 fig.add_trace(fig1.data[0], row=1, col=1) # 设置坐标轴标签(可选) fig.update_yaxes(title_text="主坐标轴", row=2, col=1, secondary_y=False) fig.update_yaxes(title_text="次坐标轴", row=2, col=1, secondary_y=True) # 展示图表 fig.show()
关键说明
specs参数的结构必须和rows、cols对应:比如rows=2, cols=1时,specs是[[子图1配置], [子图2配置]]- 添加trace时,
secondary_y=True表示将该trace绑定到次坐标轴,False绑定到主坐标轴 - 如果需要给第一张子图也加次坐标轴,只需把对应位置的
specs字典改成{'secondary_y': True}即可
内容的提问来源于stack exchange,提问作者evan54
相关产品推荐
相关产品推荐

