如何在同一柱状图中叠加绘制两个字符变量的频率(带透明度)
解决叠加对比柱状图的需求
我来帮你搞定这个问题!要在同一图里对比两个数据框中变量的频率,关键是先把数据整理成ggplot友好的长格式,之后就能轻松实现叠加/并列显示、透明度调节,以及切换计数/比例啦。
第一步:整理数据
先给两个数据框加上数据源标识,统一变量名,再合并成一个数据集——这样ggplot才能识别分组信息:
# 先加载所需包(没安装的话先运行:install.packages(c("dplyr", "ggplot2", "scales"))) library(dplyr) library(ggplot2) library(scales) # 你的原始测试数据 ds1 <- data.frame(var1 = as.character(c("7","10","11","4", "7","10","11","4"))) ds2 <- data.frame(var2 = c("4","4","7","7", "7","10","11","4")) # 为每个数据框添加分组列,统一变量名 ds1_long <- ds1 %>% mutate(source = "数据集1") %>% rename(value = var1) ds2_long <- ds2 %>% mutate(source = "数据集2") %>% rename(value = var2) # 合并成一个数据框 combined_ds <- bind_rows(ds1_long, ds2_long)
第二步:绘制叠加/并列的计数柱状图
如果想要直观对比两组计数,用position = "dodge"让柱子并列显示,同时设置alpha增加透明度,确保两组柱子都清晰可见:
ggplot(combined_ds, aes(x = value, fill = source)) + geom_bar(position = "dodge", alpha = 0.6, width = 0.7) + # width可调整柱子宽度 labs(title = "两个数据集的变量计数对比", x = "变量取值", y = "计数") + theme_minimal()
如果想要看整体叠加的分布效果,把position改成"stack"即可:
ggplot(combined_ds, aes(x = value, fill = source)) + geom_bar(position = "stack", alpha = 0.6) + labs(title = "两个数据集的变量计数叠加", x = "变量取值", y = "计数") + theme_minimal()
第三步:切换为比例(百分比)显示
如果不想看绝对计数,而是每组内的相对占比(即每个数据集中各取值的百分比),用position = "fill",再把y轴转换成百分比格式:
ggplot(combined_ds, aes(x = value, fill = source)) + geom_bar(position = "fill", alpha = 0.6) + scale_y_continuous(labels = percent_format()) + # 把数值转成百分比标签 labs(title = "两个数据集的变量占比对比", x = "变量取值", y = "比例") + theme_minimal()
这样你就能根据需求自由切换计数/比例,并且在同一图中清晰对比两个数据集的变量分布啦!
内容的提问来源于stack exchange,提问作者DGenchev
相关产品推荐
相关产品推荐

