Расположение значений столбчатой ​​диаграммы в центре с помощью ggplot2

r ggplot2 geom-bar geom-text

1262 просмотра

1 ответ

7 Репутация автора

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

ссылка на изображение

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

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)
Автор: Vinay vinay Источник Размещён: 18.11.2016 07:21

Ответы (1)


6 плюса

24284 Репутация автора

Решение

Вам больше не нужно вычислять переменную позиции. Начиная с 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() 

введите описание изображения здесь

Автор: aosmith Размещён: 18.11.2016 08:00
Вопросы из категории :
32x32