优化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
相关产品推荐
相关产品推荐

