Как добавить метки подсчета к процентной полосе в R ggplot?

Предположим, мы хотим использовать R ggplot для создания гистограммы, показывающей процентное соотношение одной переменной категории по другой переменной категории. Ниже небольшой фрейм данных в R и некоторый код, чтобы получить красивый штриховой график того, что я хочу.

MYDATA <- data.frame(Region = c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5),
                     Sex    = c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F"),
                     Count  = c(185, 130, 266, 201, 304, 283, 102, 60, 55, 51));

library(ggplot2);

ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) + 
       geom_bar(position = "fill", stat = 'identity') + 
       scale_y_continuous(labels = scales::percent) +   
       scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
       ggtitle("Figure 1: Sex breakdown by Region") +
       xlab("Region") + ylab("Percentage");

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

Теперь я хотел бы дополнить этот столбчатый график, добавив текст, который отображает необработанные значения счетчика внутри столбцов. Что касается женщин, я бы хотел, чтобы счетчики отображались вверху графика внутри розовых полос. Что касается мужчин, я бы хотел, чтобы счетчики отображались внизу графика, внутри синих полос. Я пробовал использовать geom_text, но не могу понять, как разместить ярлыки там, где мне нужно. Вместо этого мои попытки обычно приводили к тому, что значения счетчика были помещены в их собственные значения, что разрушало шкалу процентов на графиках. Может ли кто-нибудь из вас, обученных людей, сказать мне, как добавить необработанные значения счетчика в виде текста в столбцы, не разрушая остальную часть графика?


person Ben    schedule 27.03.2018    source источник


Ответы (1)


Хорошо, поэтому после публикации этого вопроса я нашел решение. Несмотря на ответ на свой вопрос (извините, ребята), я оставлю этот пост на случай, если у кого-то возникнет такая же проблема, которую им нужно решить. Не стесняйтесь добавлять и другие решения.

Уловка, которая в конечном итоге сработала, заключалась в том, чтобы разбить проблему на отдельные метки для каждого пола, используя два вызова geom_text с командой ifelse для ввода меток только для одного пола за раз и ручное y-позиционирование на желаемой высоте в каждом утверждении. . Вот код и сюжет:

ggplot(data = MYDATA, aes(x = Region, y = Count, fill = Sex)) + 
       geom_bar(position = "fill", stat = 'identity') + 
       geom_text(aes(label = ifelse(Sex == "F", Count, "")), y = 0.95) +
       geom_text(aes(label = ifelse(Sex == "M", Count, "")), y = 0.05) +
       scale_y_continuous(labels = scales::percent) +   
       scale_fill_manual(values = c("Maroon1", "RoyalBlue1")) +
       ggtitle("Figure 1: Sex breakdown by Region") +
       xlab("Region") + ylab("Percentage");

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

person Ben    schedule 27.03.2018
comment
Я пытаюсь использовать ваш код, но не могу решить проблему. Можно ли еще процент рядом с ним добавить? Возможно, это невозможно, поскольку версия ggplot2 изменилась с годами. - person Daniel; 14.04.2020