2016-11-18 1 views
0

J'ai créé un diagramme à barres empilé et facetté à l'aide de deux variables. Je suis incapable de positionner les valeurs dans l'organigramme au milieu, il apparaît soit aux extrémités ou chevauche. L'image attendue est la suivante:Positionnement des valeurs de l'histogramme empilé au centre à l'aide de ggplot2

link to the image

J'ai collé le script ci-dessous. Toute aide serait appréciée.

library(dplyr) 

library(reshape2) 

library(ggplot2) 


year<-c("2000","2000","2010","2010","2000","2000","2010","2010") 

area<-c("Rural","Rural","Rural","Rural","Urban","Urban","Urban","Urban") 

sex<-c("Male","Female","Male","Female","Male","Female","Male","Female") 

city<-c(58,61,74,65,51,55,81,54)` 

village<-c(29,30,20,18,42,40,14,29) 

town<-c(13,9,6,17,7,5,5,17) 

data<-cbind.data.frame(year,area,sex,city,village,town) 

dre<-melt(data,id.vars = c("year","area","sex")) 

dre <- arrange(dre,year,area,sex,variable) %>% 
    mutate(pos = cumsum(value) - (0.5 * value)) 


a <- ggplot(dre,aes(factor(sex),value,fill=variable)) + 
    geom_bar(stat='identity',position="stack") 

b <- a + 
    facet_wrap(factor(year)~area) 

c <- b + 
geom_text(aes(label=paste0(value,"%"),y=pos), 
     position="stack",size=2,hjust=0.85,color="black") 

d <- c + 
    coord_flip() + 
    theme_bw() + 
    scale_fill_brewer() 

print(d) 

Répondre

3

Vous n'avez plus besoin de calculer la variable de position. À partir de ggplot2_2.2.0, le texte peut être empilé et centré via position_stack.

La ligne pertinente du code geom_text est ci-dessous. Notez que je n'ai pas besoin d'utiliser la variable "pos" pour le placement de texte.

geom_text(aes(label=paste0(value,"%")), 
       position = position_stack(vjust = .5), size = 2, color = "black") 

Le code pour le tracé et le graphique résultant:

ggplot(dre, aes(factor(sex), value, fill = variable)) + 
    geom_col() + 
    facet_wrap(factor(year)~area) + 
    geom_text(aes(label = paste0(value,"%")), 
       position = position_stack(vjust = .5), size = 2, color = "black") + 
    coord_flip() + 
    theme_bw() + 
    scale_fill_brewer() 

enter image description here