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

R语言ggplot绘制数据框激活特征按class分组的柱状图

ggplot实现方案

核心逻辑是先通过长宽转换整合特征列,过滤非激活状态的样本后,用分面批量出图,避免重复代码,同时保证视觉尺度统一方便对比差异。

完整实现代码

首先加载依赖包(已加载可跳过):

library(tidyverse)

数据处理与绘图代码:

df %>%
  # 将f1、f2两个特征列从宽格式转为长格式,统一存储特征名、特征取值
  pivot_longer(
    cols = c(f1, f2),
    names_to = "feature_name",
    values_to = "feature_value"
  ) %>%
  # 仅保留特征值为1(激活状态)的记录
  filter(feature_value == 1) %>%
  # 将class转为因子类型,避免坐标轴按连续值显示多余刻度
  mutate(class = as.factor(class)) %>%
  ggplot(aes(x = class, fill = class)) +
  # 绘制计数柱状图
  geom_bar(width = 0.6) +
  # 按特征名分面,每个特征单独展示一个子图,固定坐标轴尺度方便对比
  facet_wrap(~feature_name, nrow = 1, scales = "fixed") +
  # 在柱子顶部添加具体计数标签,无需估算高度
  geom_text(
    stat = "count",
    aes(label = after_stat(count)),
    vjust = -0.3,
    size = 3.5
  ) +
  # 调整图表标注
  labs(
    title = "特征激活状态下的类别分布对比",
    x = "类别取值(class)",
    y = "激活样本数",
    fill = "类别"
  ) +
  # 用简洁的黑白主题
  theme_bw()

方案说明

  • 用pivot_longer做长宽转换后不需要为f1、f2分别写重复绘图逻辑,后续新增特征时只需要在cols参数中追加列名即可,扩展性强
  • 提前过滤特征值为0的记录,完全匹配仅统计激活状态的需求
  • 固定分面坐标轴尺度,可以直接横向对比两个特征的类别分布差异:示例数据中f1激活时共2条样本,class0、class1各占1条;f2激活时共4条样本,class0、class1各占2条,两个特征激活时都没有呈现明显的类别偏向
  • 柱子顶部的计数标签可以直接读取具体样本量,判断差异更精准

如果需要单独绘制某一个特征的分布图,不需要做长宽转换,直接过滤对应特征即可,以f1为例:

df %>%
  filter(f1 == 1) %>%
  mutate(class = as.factor(class)) %>%
  ggplot(aes(x = class, fill = class)) +
  geom_bar(width = 0.6) +
  geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.3) +
  labs(title = "f1激活状态下的类别分布", x = "类别", y = "样本量") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:12:56