首页 > 解决方案 > R ggplot2 将几个分类变量的闪避条形图除以一个带有百分比的因子

问题描述

我有以下结构的数据框

var1 <- c(0,1,0,1,1,0,1,1,0,1,1,1,1,1,1)
var2 <- c(0,0,1,1,0,0,1,1,0,1,0,0,1,1,0)
var3 <- c(1,1,1,0,1,0,1,0,0,1,1,1,1,0,1)
var4 <- c(1,0,0,0,1,0,1,1,0,0,1,1,1,0,1)
var5 <- c(1,0,0,1,0,1,1,0,0,0,1,1,1,1,1)
var6 <- c(0,0,1,0,1,0,1,1,1,1,0,0,0,0,0)
group <- c(0,0,0,0,0,0,0,1,1,1,1,1,1,1,1)
numb <- 1:15
df <- data.frame(numb,group,var1,var2,var3,var4,var5,var6)
df$var1 <- factor(df$var1)
df$var2 <- factor(df$var2)
df$var3 <- factor(df$var3)
df$var4 <- factor(df$var4)
df$var5 <- factor(df$var5)
df$var6 <- factor(df$var6)
df$group <- factor(df$group)
summary(df)
     numb      group var1   var2  var3   var4  var5  var6 
 Min.   : 1.0   0:7   0: 4   0:8   0: 5   0:7   0:6   0:9  
 1st Qu.: 4.5   1:8   1:11   1:7   1:10   1:8   1:9   1:6  
 Median : 8.0                                              
 Mean   : 8.0                                              
 3rd Qu.:11.5                                              
 Max.   :15.0                                              

我想制作所有这些变量除以组因子的组合闪避条形图。

我现在设法做的是一个条形图,其中原始数据帧中的数据在长格式的帮助下输入到一个新帧中 reshape2

df_long <- reshape2::melt(df, measure.variables = c("var1","var2","var3","var4","var5","var6"), id.vars = c("group","numb"))

然后我计算观察变量的百分比

library(dplyr)
df_pct <- df_long %>% 
    count(value, group, variable) %>% 
    mutate(pct = prop.table(n))

并绘制图表ggplot2

ggplot(data = df_pct, aes(x = variable, y = pct, fill = group, label = scales::percent(pct))) + 
  geom_col(position = 'dodge') + 
  geom_text(position = position_dodge(width = .9),    # move to center of bars
              vjust = -0.5,    # nudge above top of bar
              size = 3)+
  scale_y_continuous(labels = scales::percent)

但是我得到的图片显然与它显示的百分比有问题。我期望图表仅在df[df$var* == 1, ](变量存在)时计算案例。我不确定我的示例中的条数是多少,它清楚地显示了df[df$var* == 1, ]df[df$var* == 0, ](变量不存在)的百分比

可以请任何人帮忙绘制图表吗?我需要做什么才能正确显示百分比?如何绘制图表以便仅计算变量的“1”值?

在此处输入图像描述

标签: rggplot2

解决方案


推荐阅读