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

使用for循环创建Plotly饼图子图时遇类型不兼容错误

解决Plotly饼图子图兼容问题

错误原因

你碰到的问题是make_subplots默认创建的是xy类型子图(适配折线、柱状这类依赖坐标轴的图表),但饼图属于domain类型子图,两种子图类型不兼容,所以触发报错。

修正方案

1. 指定子图类型

在make_subplots调用时加上subplot_type='domain',明确告诉Plotly要创建适配饼图的domain布局子图。

2. 移除无效的domain参数

原代码里的domain=dict(x=[1,1])会把饼图压缩到完全不可见的位置,而且用子图布局时不需要手动设置domain,Plotly会自动分配每个子图的显示区域。

3. 修正行列计算逻辑

原代码里的math.floor(i/7+1)计算列数有误,改用整数除法i//7 +1更直观准确。

修正后的完整代码

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

# 创建7行2列的domain类型子图
fig = make_subplots(rows=7, cols=2, subplot_type='domain')

for i, year in enumerate(sorted(df.Year.unique())):
    grouped = df[df.Year == year].groupby('Commodity')['TradeValue(Us$)'].sum()\
                  .reset_index().sort_values('TradeValue(Us$)', ascending=False).head(10)
    
    # 计算当前子图的行和列
    row = i % 7 + 1
    col = i // 7 + 1
    
    # 添加饼图轨迹,无需手动设置domain
    fig.add_trace(
        go.Pie(values=grouped['TradeValue(Us$)'], labels=grouped['Commodity']),
        row=row, col=col
    )

# 可按需调整整体布局
fig.update_layout(height=1800, width=1000, title_text="各年度Top10商品贸易额占比")
fig.show()

额外优化

如果想给每个子图添加对应年份的标题,可在循环内加入以下代码:

fig.update_layout(
    **{f"title_{row}_{col}": f"Year {year}"}
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:06:24