在堆叠条形图(ggplot2)中标记所选百分比值

3

我想在堆积条形图上添加百分比标签。然而,我只想为每个条形图标记最大的三个百分比。我查看了许多有用的帖子(例如:123),到目前为止,这是我的成果:

library(ggplot2)
groups<-factor(rep(c("1","2","3","4","5","6","Missing"),4))
site<-c(rep("Site1",7),rep("Site2",7),rep("Site3",7),rep("Site4",7))
counts<-c(7554,6982, 6296,16152,6416,2301,0,
          20704,10385,22041,27596,4648, 1325,0,
          17200, 11950,11836,12303, 2817,911,1,
          2580,2620,2828,2839,507,152,2)
tapply(counts,site,sum)
tot<-c(rep(45701,7),rep(86699,7), rep(57018,7), rep(11528,7))
prop<-sprintf("%.1f%%", counts/tot*100)

data<-data.frame(groups,site,counts,prop)

ggplot(data, aes(x=site, y=counts,fill=groups)) + geom_bar()+
  stat_bin(geom = "text",aes(y=counts,label = prop),vjust = 1) +
  scale_y_continuous(labels = percent)

我想在这里插入我的输出图片,但似乎声望不够……但是上面的代码应该能够产生绘图。

那么如何只为每个条形图标记最大的3个百分比?另外,对于图例,我是否可以更改类别的顺序?例如将“Missing”放在第一位。这在这里不是一个大问题,但对于我的真实数据集来说,图例中类别的顺序确实让我困扰。

我是这个网站上的新手,如果我的问题有什么不清楚的地方,请告诉我,我会进行更正。非常感谢任何回答/意见!谢谢!

1个回答

1
我以一种比较粗糙的方式完成了这个任务,不是很优雅。
无论如何,我使用了plyr包,因为分离-应用-组合策略似乎是最好的选择。
我使用一个名为perc的变量重新创建了你的数据框,表示每个站点的百分比。然后,对于每个站点,我只保留了prop的三个最大值,并将其余部分替换为“”。
# I added some variables, and added stringsAsFactors=FALSE
data <- data.frame(groups, site, counts, tot, perc=counts/tot,
                   prop, stringsAsFactors=FALSE)

# Load plyr
library(plyr)
# Split on the site variable, and keep all the other variables (is there an
# option to keep all variables in the final result?)
data2 <- ddply(data, ~site, summarize, 
               groups=groups,
               counts=counts, 
               perc=perc,
               prop=ifelse(perc %in% sort(perc, decreasing=TRUE)[1:3], prop, ""))

# I changed some of the plotting parameters
ggplot(data2, aes(x=site, y=perc, fill=groups)) + geom_bar()+
  stat_bin(geom = "text", aes(y=perc, label = prop),vjust = 1) +
  scale_y_continuous(labels = percent)

enter image description here

编辑:看起来你原始绘图代码中的比例尺有误。它给我在y轴上得到了7500000%的结果,这对我来说似乎有点不对...

编辑:我修复了代码。


当今重新生成此代码时,需要在percentages之前加上scales::,并在summarize之前加上plyr:: - peer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接