首页 文章

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

提问于
浏览
2

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

我可以分别绘制每一个 .

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 回答

  • 4

    这是一种用半透明和覆盖的条形做的方法 . 我认为将它们放在一起可能会更清晰一点,如果您愿意,可以将 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(v0.2.0)创建于2018-05-10 .

相关问题