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

Plotly多类型子图创建失败求助:散极图与柱状图组合问题

解决Plotly make_subplots混合scatterpolar与bar子图的trace数据错误问题

核心配置要点

要组合散极图(scatterpolar)和柱状图(bar),关键是在make_subplots初始化时明确指定每个子图的类型,避免默认笛卡尔轴与极轴冲突。同时添加trace时要对应正确的子图位置和参数。

完整示例代码

以下是包含3个散极图和3个柱状图的Dash完整实现,用模拟数据演示:

import dash
from dash import dcc, html
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np

# 模拟Pandas数据
# 散极图数据
polar_data = pd.DataFrame({
    'theta': ['A', 'B', 'C', 'D']*3,
    'r': np.random.rand(12),
    'group': ['Group1']*4 + ['Group2']*4 + ['Group3']*4
})
# 柱状图数据
bar_data = pd.DataFrame({
    'category': ['X', 'Y', 'Z'],
    'value1': np.random.randint(10, 50, 3),
    'value2': np.random.randint(10, 50, 3),
    'value3': np.random.randint(10, 50, 3)
})

# 初始化子图:2行3列,上排为极坐标子图,下排为笛卡尔坐标子图
fig = make_subplots(
    rows=2, cols=3,
    specs=[
        [{'type': 'polar'}, {'type': 'polar'}, {'type': 'polar'}],
        [{'type': 'xy'}, {'type': 'xy'}, {'type': 'xy'}]
    ],
    subplot_titles=('散极图1', '散极图2', '散极图3', '柱状图1', '柱状图2', '柱状图3')
)

# 添加3个散极图trace
for i, group in enumerate(['Group1', 'Group2', 'Group3']):
    group_df = polar_data[polar_data['group'] == group]
    fig.add_trace(
        go.Scatterpolar(
            r=group_df['r'],
            theta=group_df['theta'],
            mode='markers+lines',
            name=f'Group {i+1}'
        ),
        row=1, col=i+1
    )

# 添加3个柱状图trace
for i in range(3):
    fig.add_trace(
        go.Bar(
            x=bar_data['category'],
            y=bar_data[f'value{i+1}'],
            name=f'Value {i+1}'
        ),
        row=2, col=i+1
    )

# 调整布局
fig.update_layout(height=800, width=1200, title_text="混合子图示例")
# 调整极坐标子图的角度范围(可选)
fig.update_polars(radialaxis_range=[0, 1])

# 启动Dash应用
app = dash.Dash(__name__)
app.layout = html.Div([
    dcc.Graph(figure=fig)
])

if __name__ == '__main__':
    app.run_server(debug=True)

常见错误原因及解决

  • 未指定子图类型:如果初始化make_subplots时不设置specs,默认所有子图都是笛卡尔轴(xy),添加scatterpolar时会因轴类型不匹配触发data属性错误。必须在specs中明确标记极坐标子图的type: 'polar'。
  • trace参数错误:散极图使用r和theta参数,而非柱状图的x/y,混用参数会导致数据解析错误。
  • 未指定row/col:添加trace时必须指定对应的row和col,否则所有trace会被加到同一个子图,引发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:30:13