使用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
相关产品推荐
相关产品推荐

