循环绘制子图并合并至同一画布异常:空画布加独立子图问题
问题解决:将多列柱状图合并到同一画布的子图中
错误原因分析
你的代码出现空画布+独立子图的问题,核心原因有两个:
- 循环里每次调用
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
相关产品推荐
相关产品推荐

