[R] Labeling Stacked Bar Plots Representing Percentages with Count Data

Jim Lemon drj|m|emon @end|ng |rom gm@||@com
Sat Nov 16 23:16:00 CET 2019


Hi Josh,
I couldn't work out how to do this in ggplot, but here is a possible solution:

tagSummary<-read.csv(text="speciesSci,recvDeployName,nDet
 Arenaria interpres,Bucktoe Preserve,96
 Arenaria interpres,CHDE,132
 Arenaria interpres,Fortescue,22133
 Arenaria interpres,Mispillion,2031
 Arenaria interpres,Norbury,3709
 Arenaria interpres,Penn - DRL,49
 Calidris alba,Bucktoe Preserve,56
 Calidris alba,CHDE,145
 Calidris alba,Fortescue,19000
 Calidris alba,Mispillion,2200
 Calidris alba,Norbury,3900
 Calidris alba,Penn - DRL,40
 Calidris canutus,Bucktoe Preserve,77
 Calidris canutus,CHDE,100
 Calidris canutus,Fortescue,15000
 Calidris canutus,Mispillion,1831
 Calidris canutus,Norbury,3100
 Calidris canutus,Penn - DRL,60")
par(mar=c(10,6,4,2),las=2)
barpos<-barplot(nDet~speciesSci+recvDeployName,tagSummary,xlab="",ylab="",
col=2:4)
par(las=0)
mtext("recvDeployName",side=1,line=8)
mtext("nDet",side=2,line=4)
xpos<-matrix(rep(barpos,3),ncol=3)
# get stacked heights
ypos<-matrix(tagSummary$nDet,ncol=3)
library(plotrix)
ypos<-t(matrix(tagSummary$nDet,ncol=3))
barlabels(barpos,ypos)
legendpos<-locator(1)
legend(legendpos[1],legendpos[2],unique(tagSummary$speciesSci),fill=2:4)

Your big problem is that three observation sites have tiny values
compared to the rest. As always there is a kludge available. Replace
the call to barlabels with the following:

barlabels(barpos[3:5],ypos[,3:5])
text(rep(barpos[c(1,2,6)],each=3),rep(c(5000,7500,10000),3),
 ypos[,c(1,2,6)],col=rep(2:4,3))

This gives you a legible plot, although you will probably have to play
with the "rep" numbers to get it to work for your entire data set.

Jim

On Sat, Nov 16, 2019 at 10:57 AM Josh B <jbarth1235 using gmail.com> wrote:
>
> Hello,
>
> I am trying to include the count labels on stacked bar plots which
> represent percentages. I want to show x-amount of individuals make up the
> graphed percentages. However, when I include the count labels my y-axis
> gets blown out of proportion because it changes to match the count data,
> not the percentages. Also, the bars are removed from the graph too? I have
> reviewed other posts similar to this, such as: "How to add percentage or
> count labels above percentage bar plot?". I cannot find the error in my r
> command.
>
> My command used is as follows:
>
> sumplot<-ggplot(tagSummary,aes(x=recvDeployName,y=nDet,fill=speciesSci))+
>   geom_bar(position="fill",stat="identity")+
>   geom_text(aes(label=nDet),position=position_stack(vjust=0.5))+
>   theme(axis.text.x=element_text(angle=90,hjust=1))+
>   scale_y_continous(labels=scales::percent_format())
>
> Example of data being graphed:
>
> speciesSci         recvDeployName    nDet
> 1 Arenaria interpres Bucktoe Preserve    96
> 2 Arenaria interpres CHDE               132
> 3 Arenaria interpres Fortescue        22133
> 4 Arenaria interpres Mispillion        2031
> 5 Arenaria interpres Norbury           3709
> 6 Arenaria interpres Penn - DRL          49
>
> What my graph looks like when I use the command example provided above:
> graph <https://i.stack.imgur.com/TLLGh.png>
>
> Any help would be greatly appreciated. Thank you.
>
> *Joshua N. Barth*
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list