Python绘制DataFrame分类列计数图仅显示Parch列的问题排查
问题原因
- 代码在循环中多次调用
sns.countplot()时,默认会复用matplotlib的同一活动坐标轴,新绘制的图会直接覆盖上一次的绘图结果,因此循环执行完成后仅会保留最后一次绘制的Parch列计数图。
修复方案
方案1:为每个分类列生成独立画布
每次循环时新建空白画布,避免绘图内容互相覆盖:
for column in df.select_dtypes(include='category'): if df[column].nunique() > 1: plt.figure() # 新建独立画布 sns.countplot(y=column, data=df) plt.title(f"{column} 计数分布") # 增加标题区分不同列 plt.show()
如果需要每绘制一张就立即展示,可以把plt.show()放到循环内部。
方案2:所有计数图排列在同一张画布的子图网格中
适合多图对比查看,避免弹出大量独立窗口:
# 先筛选符合条件的分类列 valid_cat_cols = [col for col in df.select_dtypes(include='category') if df[col].nunique() > 1] col_count = len(valid_cat_cols) # 计算子图行列数,按每行2个排列 row_count = (col_count + 1) // 2 plt.figure(figsize=(12, 5 * row_count)) for idx, col in enumerate(valid_cat_cols): plt.subplot(row_count, 2, idx + 1) sns.countplot(y=col, data=df) plt.title(f"{col} 计数分布") plt.tight_layout() # 自动调整子图间距避免内容重叠 plt.show()
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

