我想在堆积条形图上放置百分比标签。但是,我只想为每个条形标记最大的3个百分比。我在SO上发了很多有用的帖子(例如:1,2,3),这是我迄今为止所取得的成就:
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个百分比?另外,对于图例,我可以更改类别的顺序吗?比如说&#34; Missing&#34;一开始。这不是一个大问题,但对于我的真实数据集,图例中类别的顺序真的困扰我。
我是这个网站的新手,所以如果有任何不清楚我的问题,请告诉我,我会解决它。我感谢任何回答/评论!谢谢!
答案 0 :(得分:1)
我是以一种黑客的方式做到这一点的。它并不那么优雅。
无论如何,我使用了plyr
包,因为split-apply-combine策略似乎是这里的方法。
我使用变量perc
重新创建了数据框,表示每个网站的百分比。然后,对于每个网站,我只保留prop
的3个最大值,并将其余值替换为""
。
# 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)
编辑:看起来你的原始绘图代码中的刻度是错误的。它给我的结果在y轴上有7500000%,这对我来说似乎有点不对...... 编辑:我修复了代码。