r - 如何在一张覆盖有透明度的条形图上绘制两个字符变量的频率

标签 r ggplot2 bar-chart

我有两个大型数据框,其中包含许多类特征和/或因子列。我需要通过将每对变量的频率叠加在同一条形图上来比较它们在第一个和第二个数据框中采用的值的频率。我希望能够绘制计数或比例。

我可以单独绘制每一个。

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"))
ggplot(ds1, aes(var1)) + geom_bar()
ggplot(ds2, aes(var2)) + geom_bar()

但我正在努力:

  1. 将两者放在一起
  2. 添加透明度,使两对条形都可见
  3. 绘图比例而不是计数

最佳答案

这是一种将条形半透明并覆盖的方法。我认为将条形图彼此相邻放置可能会更清晰一些,如果您愿意,请将 position_identity() 行更改为 position_dodge():

library(ggplot2)
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"))

plot.df <- cbind(ds1, ds2)
plot.df <- reshape2::melt(plot.df, id.vars = NULL)

ggplot(plot.df, aes(value, group=variable, fill=variable)) + 
  geom_bar(position = position_identity(), 
           aes(y = ..prop..), 
           alpha=.6,
           color='black')+
  theme_minimal() + ggtitle("Comparing the Frequency of Categories")

编辑:对于 data.frames 长度不同的情况:

ds1$variable <- "ds1"
ds2$variable <- "ds2"

names(ds1) <- names(ds2)

plot.df <- rbind(ds1, ds2)

然后从这里绘制。

reprex package于2018年5月10日创建(v0.2.0)。

关于r - 如何在一张覆盖有透明度的条形图上绘制两个字符变量的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50261795/

相关文章:

r - 即使指定,散点图填充在 ggplot2 中也不会改变

r - 合并R中的两个因子列

r - 在计算的 stat_smooth 线上添加标签 ggplot geom_dl

R [ggplot2] 如何设置刻度大小?

python - 如何以 pandastic 方式绘制堆叠条形图?

flot - 使用 Flot API 绘制多个条形图

datetime - 在 ggplot2 中绘制 X 轴定义为时间序列的条形图

r - Atom编辑器R语言错误-无法加载代码片段

R - 仅按时间子集数据帧

减少范围ggplot y轴而不减少显示数据的范围