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

Plotly多循环绘制2×3网格子图失败,请求技术帮助

解决Plotly 2×3子图布局异常问题

你的代码核心问题是三层循环嵌套导致每个子图被重复添加了所有num_cat_col列的箱线图,而非每个子图对应单个列的可视化。同时代码中的x变量未实际发挥作用,属于冗余代码。

要实现2×3网格的子图布局,每个子图对应num_cat_col中的一列,只需将列与子图位置一一映射,用单层循环即可完成:

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

plot_row = 2
plot_col = 3
# 确保列数与子图总数匹配(2*3=6),如果列数不同可调整逻辑
assert len(num_cat_col) == plot_row * plot_col, "num_cat_col的数量需与子图总数(6)一致"

# 简化specs的生成方式,避免重复写字典
fig = make_subplots(
    rows=plot_row, 
    cols=plot_col, 
    specs=[[{'type':'box'}]*plot_col for _ in range(plot_row)]
)

# 遍历每个列,计算对应的子图位置
for idx, col in enumerate(num_cat_col):
    # Plotly子图的行/列从1开始计数
    row = (idx // plot_col) + 1
    col_pos = (idx % plot_col) + 1
    fig.add_trace(go.Box(x=df[col], y=df['Price']), row=row, col=col_pos)

fig.show()

关键逻辑说明

  • 用enumerate获取每个列的索引idx,通过整数除法计算子图的行号,取余运算计算子图的列号,实现列与子图位置的一一对应
  • 用列表推导式简化specs的定义,避免重复编写相同的字典
  • 添加断言检查列数与子图总数是否匹配,提前发现数据与布局不匹配的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:10:01