r - 如何在ggplot中向条形图添加文本

标签 r ggplot2 tidyr

我意识到这个问题已经有多个实例,但没有一个真正为我提供答案。所以我得到了这个(已经融化的)数据框:

df <-data.frame(
     Var1 = c("Inschrijvingen", "BSA", "Inschrijvingen", "BSA"),
     Var2 = c("Totaal","Totaal", "OD_en_MD", "OD_en_MD"),
     Value = c(262, 190, 81, 69)
)

请注意,这只是数据框的一小部分,我有很多类似的数据框。我通过以下方式制作了堆叠条形图:

ggplot(df, aes(Var2, as.numeric(as.character(value)), fill=Var1))+ 
  geom_bar(position="identity", stat="identity") +
  scale_alpha_manual(values=c(.6,.8)) + 
  ggtitle(names(df)) + labs(x="", y="Aantal") + 
  scale_colour_brewer(palette = "Set2") +
  scale_fill_discrete("BSA Resultaten", labels=c("BSA niet behaald", "BSA behaald"))

这给了我以下条形图:

Received Bar Chart

现在我想将百分比添加到条形图的蓝色部分。红色部分是订户总数,蓝色部分是通过的数量。所以在我的例子中,这些百分比应该变成

df$Value[2]*100/df$Value[1]
df$Value[4]*100/df$Value[3]

由于我有大量这些数据框,我真的不想手动完成。我在 stackoverflow 上看到过一些例子,其中文本和百分比计算都在 ggplot 中实现,百分比是在使用 ggplot 之前计算的,但我担心我的数据准备工作并不是那么容易做到这一点。

我尝试过的事情:

#ddply, to add a column with percentages:
ddply(df2, .(Var2), transform, percent=value*100/value)

当然,这里的问题是我的百分比计算。如何让 ddply 选择并乘以正确的值?这首先是正确的方法吗?

   #Calculating percentages before melting the data frame, which gives me the (molten) data frame:
    df2 <- data.frame( 
      Var1 =c("Inschrijvingen", "BSA","Percentage","Inschrijvingen", 
            "BSA","Percentage"),
      Var2 =c("Totaal","Totaal","Totaal","OD_en_MD","OD_en_MD","OD_en_MD"),
      Value = c(262,190,72.5,81,69,85.2)
)

这里的问题是我不知道如何在不绘制百分比的情况下将其放入 ggplot 中。我想我应该将值 PercentageVar1 分开,但我一直无法做到这一点。

如有任何帮助,我们将不胜感激!

最佳答案

library(dplyr)
df <- df %>%
  group_by(Var2) %>%
  mutate(Max = max(Value), Min = min(Value), Per = round(Min*100/Max, 2))%>%
  arrange(Var2)

ggplot(df, aes(Var2, as.numeric(as.character(Value)), fill=Var1))+ 
  geom_bar(position="identity", stat="identity") +
  scale_alpha_manual(values=c(.6,.8)) + 
  ggtitle(names(df)) + labs(x="", y="Aantal") + 
  scale_colour_brewer(palette = "Set2") +
  scale_fill_discrete("BSA Resultaten", labels=c("BSA niet behaald", "BSA behaald"))+
  annotate("text", x = 1:length(unique(df$Var2)), y=rep(min((unique(df$Max)-unique(df$Min))),2), label = unique(df$Per))

关于r - 如何在ggplot中向条形图添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44136301/

相关文章:

R - 一系列数据点的递归二分法

r - 具有连续和离散 x 变量的箱线图

r - R 中系数的可视化(点图)

r - 如何平衡不平衡的面板数据?

r - 是否有 tidyr 的 unnest() 函数的基础 R 版本?

r - 将分隔的字符串拆分为多列并将它们分成行

r - 您可以将dplyr::mutate和dplyr::lag设为默认值=它自己的输入值吗?

r - 从我的应用程序下载shinyapps代码

r - DEoptim 策略选择

r - 在 ggplot 图表中包含多个 grobs 对象