ggplot2. Как сделать, чтобы geom_bar уложил график y в диапазоне 0-100%? - PullRequest
1 голос
/ 04 апреля 2020

При использовании geom_bar с stat = "identity", максимальная ось Y представляет собой сумму всех значений. В этом примере я хочу, чтобы максимальная ось Y составляла 100, а не 300, и столбец с накоплением отображал пропорцию столбца, который есть у каждой копии. Кто-нибудь знает, как я могу это сделать?

dat = data.frame(sample = c(rep(1, 12),
                            rep(2, 9),
                            rep(3, 6)),
                 category = c(rep(c("A", "B", "C"), each = 4),
                              rep(c("A", "B", "C"), each = 3),
                              rep(c("A", "B", "C"), each = 2)),
                 replicate = c(rep(c("a", "b", "c", "d"), 3),
                               rep(c("a", "b", "c"), 3),
                               rep(c("a", "b"), 3)),
                 value = c(rep(25, 12),
                           rep(c(25, 25, 50), 3),
                           rep(50, 6))
                 )

ggplot(dat, 
       aes(x = sample, y = value)) +
  geom_bar(aes(fill = replicate),
           stat = "identity")

Stacked bar with incorrect y-axis

1 Ответ

4 голосов
/ 04 апреля 2020

Одним из способов будет предварительный расчет значений перед построением графика.

library(dplyr)
library(ggplot2)

dat %>%
   group_by(sample) %>%
   mutate(value = value/sum(value) * 100) %>%
   ggplot() + aes(x = sample, y = value, fill = replicate) +
   geom_col()  +
   ylab('value  %')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...