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

循环绘制子图并合并至同一画布异常:空画布加独立子图问题

问题解决:将多列柱状图合并到同一画布的子图中

错误原因分析

你的代码出现空画布+独立子图的问题,核心原因有两个:

  • 循环里每次调用plt.figure()都会新建一个独立画布,导致每个柱状图都在单独窗口,无法共用同一画布
  • 最初的plt.subplots(figsize=(16,8))没有保存fig和ax对象,相当于白创建了空画布

修正后的代码

import matplotlib.pyplot as plt

# 提取需要绘图的列
dfPlot = df[['column 1','column 2','column 3','column 4','column 5','column 6','column 7','column 8','column 9']]

# 创建3行3列的子图布局,保存画布和子图对象
fig, axs = plt.subplots(nrows=3, ncols=3, figsize=(16,8))
count = 0

for col in dfPlot.columns:
    # 对当前列降序排序
    ds = dfPlot.sort_values(col, ascending=False)
    # 计算当前子图的行、列索引
    row = count // 3
    col_pos = count % 3
    # 在对应子图上绘制柱状图
    axs[row, col_pos].bar(ds.index, ds[col])
    # 添加子图标题
    axs[row, col_pos].set_title(f'{col} 降序柱状图')
    # 旋转x轴标签避免重叠
    axs[row, col_pos].tick_params(axis='x', rotation=45)
    count += 1

# 自动调整子图间距,避免元素重叠
plt.tight_layout()
plt.show()

关键修改说明

  • 用fig, axs = plt.subplots(...)直接创建带3x3子图的画布,axs是子图对象数组,方便精准定位每个子图位置
  • 循环中不再新建画布,而是通过axs[row, col_pos]指定同一画布内的子图
  • 添加plt.tight_layout()自动优化子图间距,解决标题、标签重叠问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:24