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

使用sns.distplot()和sns.boxplot()时首个子图被跳过的原因?

问题:Seaborn子图首个位置空置的原因及解决方法

我尝试使用sns.distplot()和sns.boxplot()可视化变量,但生成的结果里首个子图被跳过了,请问这是什么原因?


核心原因

你创建的2×2子图对象axes是二维数组,但代码中直接将其当作一维数组调用。当执行axes[i]时,i=0对应的是第一行的两个子图组成的数组(而非单个子图),sns.distplot无法在轴对象数组上完成绘图,导致第一个子图(axes[0][0])空置,后续绘图也出现了错位。

解决方法

只需在创建子图后,将二维的axes展平为一维数组,就能按索引依次调用单个子图:

import seaborn as sns
import matplotlib.pyplot as plt

# 替换为你的实际变量和数据集
numerical_cols = ["age", "fare"]
data = ...

# 创建子图并展平轴数组
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes = axes.flatten()

for i, col in enumerate(numerical_cols):
    # 绘制分布直方图
    sns.distplot(data[col], ax=axes[i])
    axes[i].set_title(f"Distribution of {col}")
    # 绘制箱线图
    sns.boxplot(x=data[col], ax=axes[i+2])
    axes[i+2].set_title(f"Boxplot of {col}")

plt.tight_layout()
plt.show()

修改后,四个子图会依次填充对应内容,不会再出现首个子图空置的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:11:27