2016-11-18 6 views
0

Я создал штабелированный штрих-код и огранен с использованием двух переменных. Я не могу позиционировать значения в барчарте посередине, он либо появляется в крайности, либо перекрывается. Ожидаемое изображение следующее:Позиционирующие значения сложенного бархарта в центре с помощью ggplot2

link to the image

Я вставил скрипт ниже. Любая помощь будет оценена по достоинству.

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) 

ответ

3

Вам больше не нужно вычислять переменную положения. Начиная с ggplot2_2.2.0, текст может быть уложен и центрирован с помощью position_stack.

Соответствующая строка geom_text приведен ниже. Заметьте, что мне не нужно использовать переменную «pos» вообще для размещения текста.

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

Код для участка и полученный график:

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