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

如何在同一柱状图中叠加绘制两个字符变量的频率(带透明度)

解决叠加对比柱状图的需求

我来帮你搞定这个问题!要在同一图里对比两个数据框中变量的频率,关键是先把数据整理成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:59