我想将百分比标签贴在堆积的条形图上。但是,我只想为每个栏标记最大的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个百分比?另外,对于图例,我是否可以更改类别的顺序?例如,将“缺少”放在第一位。这不是什么大问题,但对于我的真实数据集,图例中类别的顺序确实让我感到困扰。
我是该网站的新手,所以如果我的问题不清楚,请告诉我,我会解决。我感谢任何答案/评论!谢谢!
我以一种不客气的方式做到了这一点。没那么优雅。
无论如何,我使用了该plyr
程序包,因为拆分应用合并策略似乎是解决问题的方法。
我用perc
代表每个站点百分比的变量重新创建了数据框。然后,对于每个网站,我只保留的3个最大值,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)
编辑:看起来您的比例尺在您的原始绘图代码中是错误的。它给我的结果在y轴上为7500000%,对我来说似乎有点差...
编辑:我修复了代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句