ggplot:如何在直方图的支柱顶部添加一定百分比

时间:2018-01-05 12:34:08

标签: r ggplot2 bar-chart axis

我需要复制直方图/条形图的某种格式。我已经使用ggplot进行了一些很好的修改,以便对分类x变量进行分组并使用HEX指定颜色。

以下是我尝试绘制/复制的内容:

enter image description here

这是我的数据结构的MWE:

sex <- sample(0:1, 100, replace=TRUE)
group <- sample(2:5, 100, replace=TRUE)
data <- data.frame(sex, group)

library(ggplot2)
ggplot(data, aes(x = group, group=sex, fill=factor(sex) )) +
  geom_histogram(position="dodge", binwidth=0.45) +                      
  theme(axis.title.x=element_blank(), axis.title.y=element_blank()) +    
  guides(fill=guide_legend(title="sex")) +                        
  scale_y_continuous(labels = scales::percent_format())   +              
  scale_fill_manual(values=c("#b6181f", "#f6b8bb")) 

我明白了:

enter image description here

我无法处理的小事情是:

  • 替换x轴上的因子标签,我的直方图方法可能有问题,但我也发现条形图没有实用的方法
  • 围绕百分比数字,百分比无小数

但最重要的是,我不知道如何为一个组添加一个百分比值,一个性别到每个栏的顶部..

我期待着一些建议:)

1 个答案:

答案 0 :(得分:3)

首先,我会将您的x轴数据视为因子并将其绘制为条形。将百分比值文本添加到条形顶部会显示以下问题:Show % instead of counts in charts of categorical variables。 此外,y轴百分比值不是四舍五入的问题,它们实际上不是百分比值。 y = ..prop..解决了这个问题。

你在寻找那个(我总结了一切)?

sex <- sample(0:1, 100, replace=TRUE)
group <- sample(2:5, 100, replace=TRUE)
data <- data.frame(sex, group)

labs <- c("Score < 7", "Score\n7 bis < 12", "Score\n12 bis < 15",
          "Score\n15 bis < 20","Score >= 20")

ggplot(data, aes(x = as.factor(group), y = ..prop.., group = sex, fill = factor(sex) )) +
  geom_bar(position = "dodge") +
  geom_text(aes(label = scales::percent(..prop..)), 
            position = position_dodge(width = 0.9), stat = "count", vjust = 2) +
  labs(x = NULL, y = NULL) +
  guides(fill = guide_legend(title = "sex")) +                        
  scale_y_continuous(labels = scales::percent_format())   +              
  scale_fill_manual(values=c("#b6181f", "#f6b8bb")) +
  scale_x_discrete(labels = labs)

enter image description here