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

使用Seaborn实现2×2垂直堆叠图表的技术咨询

解决2×2垂直堆叠图表的问题

Got it, let's fix this up! The issue with your current code is that you're creating a 1-row, 2-column subplot grid (plt.subplots(1,2)) for each feature, which only gives you side-by-side plots. To get a 2×2 stacked layout (two rows, two columns) per feature, you just need to adjust the subplot grid dimensions and map your plots to the correct axes positions.

修改后的完整代码

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt  # 别忘了导入matplotlib!

df = pd.read_csv('dataset.csv')
print(df.columns)

for feature in df.columns:
    data = df[feature].tolist()
    # 创建2行2列的子图网格,设置合适的尺寸让图表更清晰
    fig, ax = plt.subplots(2, 2, figsize=(10, 8))
    
    # 第一行第一列:非归一化,仅直方图
    sns.distplot(data, bins=25, ax=ax[0,0], norm_hist=False, hist=True, kde=False).set_title(f"{feature} - Hist Only (Non-Normalized)")
    
    # 第一行第二列:归一化,直方图+KDE曲线
    sns.distplot(data, bins=25, ax=ax[0,1], norm_hist=True, hist=True, kde=True).set_title(f"{feature} - Hist + KDE (Normalized)")
    
    # 第二行第一列:非归一化,仅KDE曲线
    sns.distplot(data, bins=25, ax=ax[1,0], norm_hist=False, hist=False, kde=True).set_title(f"{feature} - KDE Only (Non-Normalized)")
    
    # 第二行第二列:非归一化,直方图+KDE曲线
    sns.distplot(data, bins=25, ax=ax[1,1], norm_hist=False, hist=True, kde=True).set_title(f"{feature} - Hist + KDE (Non-Normalized)")
    
    # 自动调整子图间距,避免标题、标签重叠
    plt.tight_layout()
    plt.show()

关键修改点说明

  • 调整子图网格:把plt.subplots(1,2)改成plt.subplots(2,2),这样就生成了2行2列的子图布局。此时ax是一个二维数组,你可以通过ax[row, col]的方式访问每个子图的坐标轴(比如ax[0,0]是第一行第一个子图,ax[1,0]是第二行第一个子图)。
  • 补充缺失的导入:原代码里用了plt但没导入matplotlib.pyplot,这会导致运行报错,所以加上了import matplotlib.pyplot as plt。
  • 优化图表可读性:添加figsize参数设置整体图的大小,用plt.tight_layout()自动调整子图间距,防止标题和坐标轴标签互相重叠。

版本兼容提示(可选)

如果你的Seaborn版本是0.11.0及以上,distplot已经被官方标记为弃用,推荐使用更灵活的histplot和kdeplot来替代,示例代码如下:

# 替换distplot的示例代码
sns.histplot(data, bins=25, ax=ax[0,0], stat="count").set_title(f"{feature} - Hist Only (Non-Normalized)")
sns.histplot(data, bins=25, ax=ax[0,1], stat="density", kde=True).set_title(f"{feature} - Hist + KDE (Normalized)")
sns.kdeplot(data, ax=ax[1,0]).set_title(f"{feature} - KDE Only (Non-Normalized)")
sns.histplot(data, bins=25, ax=ax[1,1], stat="count", kde=True).set_title(f"{feature} - Hist + KDE (Non-Normalized)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:07:36