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

优化R语言两分类变量计数绘图流程:简化ggplot2实现

你可以完全跳过手动创建数据框的步骤,用以下几种更简便的方式实现需求:


方法1:直接用ggplot的stat_count自动统计(最简便)

不用提前计算任何频数,直接基于原始数据绘图,ggplot会自动帮你统计每组的人数:

suppressPackageStartupMessages(library(ggplot2))

# 原始数据
low_income <- c("yes","yes", "no","yes","yes","yes", "no","yes","yes","yes", "no","no")
test <- c("completed", "none","completed", "none","completed", "completed","completed", "completed", "none","completed", "none","completed")
df <- data.frame(low_income, test)

# 直接绘图,stat="count"是geom_bar的默认值,可省略
ggplot(df, aes(x = low_income, fill = test)) + 
  geom_bar(position = "dodge") +  # 默认stat=count,自动统计频数
  scale_fill_brewer(palette = "Set1")

如果只想展示低收入(low_income == "yes")的群体,加个筛选即可:

ggplot(df[df$low_income == "yes", ], aes(x = low_income, fill = test)) + 
  geom_bar(position = "dodge") +
  scale_fill_brewer(palette = "Set1")

方法2:用dplyr自动生成统计数据框

如果需要保留统计后的数据集,用dplyr的分组汇总功能,一键生成包含count的dataframe,无需手动输入数值:

suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(dplyr))

# 原始数据
low_income <- c("yes","yes", "no","yes","yes","yes", "no","yes","yes","yes", "no","no")
test <- c("completed", "none","completed", "none","completed", "completed","completed", "completed", "none","completed", "none","completed")
df <- data.frame(low_income, test)

# 自动分组统计
df_2 <- df %>%
  group_by(low_income, test) %>%
  summarise(count = n(), .groups = "drop")  # .groups="drop"取消分组状态

# 绘图
ggplot(df_2, aes(x = low_income, y = count, fill = test)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_brewer(palette = "Set1")

方法3:将table对象直接转为数据框

如果你已经生成了table,不用手动输入数值,直接把table转成dataframe即可:

suppressPackageStartupMessages(library(ggplot2))

# 原始数据
low_income <- c("yes","yes", "no","yes","yes","yes", "no","yes","yes","yes", "no","no")
test <- c("completed", "none","completed", "none","completed", "completed","completed", "completed", "none","completed", "none","completed")
df <- data.frame(low_income, test)

# 生成table后直接转成数据框
table1 <- table(df$low_income, df$test)
df_2 <- as.data.frame(table1)
colnames(df_2) <- c("low_income", "test", "count")  # 重命名列名

# 绘图
ggplot(df_2, aes(x = low_income, y = count, fill = test)) + 
  geom_bar(stat = "identity", position = "dodge") + 
  scale_fill_brewer(palette = "Set1")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:36:41