How to put values in faceted bar charts in R?

2

I'm trying to generate a faceted bar chart with the R, according to date frame and commands below:

   ###############################################
    ######___PACKGES UTILIZADOS_____###############
    ###############################################

    install.packages("plyr")
    library(plyr)

    install.packages("ggplot2")
    library(ggplot2)

    install.packages("ggthemes")
    library(ggthemes)

###############################################
######____DATA FRAME____________###############
###############################################

uf <- c("AC","AC","AC","AC","AC","AC","AC","AC","AM","AM","AM","AM","AM","AM","AM","AM")
da <- c("Federal", "Estadual", "Municipal", "Privada","Federal", "Estadual", "Municipal", "Privada","Federal", "Estadual", "Municipal", "Privada","Federal", "Estadual", "Municipal", "Privada")
tr <- c(97,99,90.5,78.6,3,1,9.5,21.4,97.2,99.1,96.8,98.7,2.8,0.9,3.2,1.3)
resposta <- c("resposta","resposta","resposta","resposta","não resposta","não resposta","não resposta","não resposta","resposta","resposta","resposta","resposta","não resposta","não resposta","não resposta","não resposta")

taxa <- data.frame(uf, da, tr,resposta)

O primeiro gráfico em facetas é gerado, conforme abaixo.

###############################################
######___BASIC GRAPHICS_____###############
###############################################

g1 <- ggplot() + geom_bar(aes(y = tr, x = da, fill = resposta), data = taxa, 
                          stat="identity")
g1 <- g1 + facet_grid(.~uf)
g1

[![Dependência administrativa por taxa de resposta][1]][1]


Depois eu acrescento os valores dentro das barras, mas ficam desajustados

###############################################
######___Adding data labels_____###############
###############################################

g1 <- g1 + geom_text(data=taxa, aes(x = da, y = tr, label = tr), size=4)
g1 <- g1 + facet_grid(.~uf)
g1

Finally,Itrytocentralizethevalues,throughthedpplyfunctionofplyr,asbelow:

###########################################################_Adjustingdatalabelsposition_####################################################################taxa<-ddply(taxa,.(da),transform,pos=cumsum(tr)-(0.5*tr))#Ajustaaposiçãog1<-ggplot()+geom_bar(aes(y=tr,x=da,fill=resposta),data=taxa,stat="identity") +
                facet_wrap(~uf) +
                geom_text(data=taxa, aes(x = da, y = pos, label = tr), size=4) + 
                theme(legend.position="bottom", legend.direction="horizontal", 
                 legend.title = element_blank())

g1

However, the graph is unconfigured, with values outside the bar and the variable y going up to 200. What is wrong?

Thank you in advance

    
asked by anonymous 05.07.2016 / 15:48

1 answer

0

What you need to do in this case is to calculate the center position of each column before plotting and then use this value as y of geom_text . This calculation is simple but it may be annoying to derive, I copied the formuleta from here .

Using dplyr becomes simpler. You need to group by the factors that separate the columns, and then create a new column (using the data frame taxa before ddply):

taxa %<>% group_by(uf, da) %>%
  mutate(pos = cumsum(tr) - 0.5*tr)

Then just plot. I made a set up in your code of ggplot to be more succinct, but it's essentially the same, except changing y of geom_text :

ggplot(taxa, aes(x = da, y = tr)) + 
  geom_bar(aes(fill = resposta), stat = "identity") + 
  geom_text(aes(y = pos, label = tr), size = 4) + 
  facet_grid( . ~ uf) 

PS: To do this you will not need plyr and at no point in this code did you need ggthemes .

    
09.07.2016 / 03:40