ggplot2 barplot - добавление процентных меток внутри столбцов с накоплением, но с сохранением значений на оси Y - PullRequest
0 голосов
/ 31 марта 2020

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

Мне удалось создать сложенный график количества для каждой группы. Также я создал ярлыки, и они размещены правильно. С чем я борюсь, как рассчитать процент там?

Я пробовал это, но я получаю ошибку:

dataex <- iris %>%
  dplyr::group_by(group, Species) %>%
  dplyr::summarise(N = n())
names(dataex)

dataex <- as.data.frame(dataex)
str(dataex)

ggplot(dataex, aes(x = group, y = N, fill = factor(Species))) +
  geom_bar(position="stack", stat="identity") +
  geom_text(aes(label = ifelse((..count..)==0,"",scales::percent((..count..)/sum(..count..)))), position = position_stack(vjust = 0.5), size = 3) +
  theme_pubclean()

Ошибка в (количество) == 0: сравнение (1) возможно только для атомарных и списочных типов

желаемый результат:

enter image description here

1 Ответ

0 голосов
/ 31 марта 2020

ну, только что нашел ответ ... или обходной путь. Возможно, это поможет кому-то в будущем: подсчитать процент перед ggplot, а затем просто использовать этот вектор в качестве меток.

dataex <- iris %>%
  dplyr::group_by(group, Species) %>%
  dplyr::summarise(N = n()) %>%
  dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %")) 
names(dataex)

dataex <- as.data.frame(dataex)
str(dataex)

ggplot(dataex, aes(x = group, y = N, fill = factor(Species))) +
  geom_bar(position="stack", stat="identity") +
  geom_text(aes(label = dataex$pct), position = position_stack(vjust = 0.5), size = 3) +
  theme_pubclean()

enter image description here

...