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

如何一次性为DataFrame的分类列批量绘制条形图?

批量绘制分类特征条形图的解决方案

你遇到的问题根源有两个:

  1. sns.displot默认只会处理DataFrame的单一列(这里educational-num因类型被优先识别),不会自动遍历所有分类列生成子图;
  2. displot返回的是FacetGrid对象,没有flatten方法,它的子图轴存储在axes属性中。

下面提供两种可行的批量绘制方法:

方法一:用Pandas原生绘图(和数值特征直方图逻辑一致)

利用Pandas的plot.bar结合子图布局,直接遍历每个分类列绘制条形图:

%matplotlib inline
import matplotlib.pyplot as plt

# 定义子图布局:2行5列(适配10个分类特征),调整画布大小
fig, axarr = plt.subplots(nrows=2, ncols=5, figsize=(20, 10))
xlbl = ['workclass', 'education', 'educational-num','marital-status', 'occupation', 'relationship', 'race',
       'gender', 'native_country', 'income']

# 遍历每个分类列和对应的子图轴
for idx, (col, ax) in enumerate(zip(temp2.columns, axarr.flatten())):
    # 先统计每个类别的数量,再绘制条形图
    temp2[col].value_counts().plot(kind='bar', ax=ax)
    # 设置坐标轴标签
    ax.set_xlabel(xlbl[idx])
    ax.set_ylabel("Count")
    # 旋转x轴标签,避免类别名称重叠
    ax.tick_params(axis='x', rotation=45)

# 自动调整子图间距,防止标签被截断
plt.tight_layout()
plt.show()

方法二:用Seaborn Catplot分面绘制

通过melt将宽表转为长表,配合Seaborn的分面功能批量生成条形图:

%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt

# 将宽格式的分类特征表转为长格式,适配Seaborn分面逻辑
melted_temp2 = temp2.melt(var_name='feature', value_name='category')

# 创建分面条形图,每行显示5个子图
g = sns.catplot(
    data=melted_temp2,
    x='category',
    kind='count',  # 绘制计数条形图
    col='feature',
    col_wrap=5,
    figsize=(20, 8),
    sharex=False,  # 关闭x轴共享,避免不同类别的标签冲突
    sharey=True
)

# 为每个子图设置自定义标签
xlbl = ['workclass', 'education', 'educational-num','marital-status', 'occupation', 'relationship', 'race',
       'gender', 'native_country', 'income']
for ax, label in zip(g.axes, xlbl):
    ax.set_xlabel(label)
    ax.set_ylabel("Count")
    ax.tick_params(axis='x', rotation=45)

plt.tight_layout()
plt.show()

额外说明

  • 若部分分类特征的类别过多,可进一步调整figsize或rotation角度优化显示效果;
  • value_counts()会自动统计每个类别的出现次数,是绘制分类特征条形图的核心步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:41:03