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

如何实现2行2列的正确子图布局?现有绘图效果不佳

解决Matplotlib+Seaborn 2行2列子图布局问题

你的核心问题是子图布局参数设置错误加上循环逻辑有问题,导致4个特征的图挤成一团。直接看修正后的代码和说明:

修正后的代码

import matplotlib.pyplot as plt
import seaborn as sns

cat_features = ['Gender', 'Customer Type', 'Type of Travel', 'Class', 'satisfaction']
# 创建2行2列的子图,放大画布尺寸给每个子图足够展示空间
f, axs = plt.subplots(2, 2, figsize=(12, 8))
# 将子图数组展平为一维,和4个特征一一对应循环
for ax, col in zip(axs.flatten(), cat_features[:-1]):
    sns.countplot(data=df_train, x=col, hue="satisfaction", palette='Blues', ax=ax)
    # 给每个子图添加标题,明确展示内容
    ax.set_title(f'{col} 分布与满意度关联')
    # 旋转x轴标签,避免长标签重叠
    ax.tick_params(axis='x', rotation=45)
# 自动调整子图间距,避免标题、标签互相遮挡
f.tight_layout()
plt.show()

原代码的问题点

  1. 布局参数错误:你需要2行2列,但原代码写的是plt.subplots(2, len(cat_features[:-1])),也就是2行4列,多余的子图挤占空间,导致有效图被过度压缩。
  2. 循环逻辑错误:直接遍历axs会拿到每一行的子图数组,再用ax.flatten()[i]还用到了未定义的i,完全不符合配对逻辑,必须用axs.flatten()把二维子图数组转成一维,才能和4个特征一一对应。
  3. 画布尺寸太小:figsize=(10,4)的高度不足,4个子图垂直排列时会被压得很窄,放大到(12,8)能保证每个子图的可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:30:59