无法在循环中基于不同特征生成多个Seaborn countplot图表
问题原因
你的代码每次调用sns.countplot()时,都是在同一个绘图轴(Axes)上绘制,后面的图表会直接覆盖前面的内容;再加上没有显式触发图表渲染,最终只会保留并显示最后一次绘制的结果。
修复方法
有两种常用解决方式,可根据需求选择:
方式1:逐个显示独立图表
每次绘制完一个特征的countplot后,调用plt.show()强制渲染当前图表,每个图会单独弹出显示:
import seaborn as sns import matplotlib.pyplot as plt col_list = ['sex', 'class', 'embark_town'] for col in col_list: print(col) sns.countplot(x=df[col]) plt.show() # 触发当前图表的显示
方式2:同一画布展示所有子图
创建多子图布局,把每个特征的图画在不同子图里,一次性展示所有结果:
import seaborn as sns import matplotlib.pyplot as plt col_list = ['sex', 'class', 'embark_town'] # 创建3行1列的子图,设置画布大小 fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(8, 12)) for idx, col in enumerate(col_list): print(col) # 指定当前子图的轴对象 sns.countplot(x=df[col], ax=axes[idx]) # 给每个子图添加标题,提升可读性 axes[idx].set_title(f'{col} 分布统计') plt.tight_layout() # 自动调整子图间距,避免标题和标签重叠 plt.show()
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

