Расположите geom_text в середине каждого сегмента столбца в столбчатой ​​диаграмме с накоплением geom_col

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

Однако моя наивная попытка терпит неудачу.

library(ggplot2) # Version: ggplot2 2.2

dta <- data.frame(group  = c("A","A","A",
                             "B","B","B"),
                  sector = c("x","y","z",
                             "x","y","z"),
                  value  = c(10,20,70,
                             30,20,50))

ggplot(data = dta) +
  geom_col(aes(x = group, y = value, fill = sector)) +
  geom_text(position="stack",
            aes(x = group, y = value, label = value)) 

Очевидно, что установка y=value/2 для geom_text тоже не помогает. Кроме того, текст расположен в неправильном порядке (перевернутом).

Любые (элегантные) идеи, как это решить?


person gosz    schedule 21.11.2016    source источник


Ответы (1)


Вам нужно сопоставить переменную с эстетикой для представления групп в geom_text. Для вас это ваша переменная «сектор». Вы можете использовать его с эстетикой group в geom_text.

Затем используйте position_stack с vjust, чтобы центрировать метки.

ggplot(data = dta) +
    geom_col(aes(x = group, y = value, fill = sector)) +
    geom_text(aes(x = group, y = value, label = value, group = sector),
                  position = position_stack(vjust = .5))

Вы можете сэкономить время на наборе текста, настроив эстетику глобально. Тогда fill будет использоваться как группирующая переменная для geom_text, и вы можете пропустить group.

ggplot(data = dta, aes(x = group, y = value, fill = sector)) +
    geom_col() +
    geom_text(aes(label = value),
              position = position_stack(vjust = .5))

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

person aosmith    schedule 21.11.2016