R добавить метки подсчета частоты в ggplot geombar - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть такой график:

enter image description here

со следующим кодом:

df.m <- reshape2 :: melt (ngli, id.vars = "Hugo_Symbol") </p>

plot <- ggplot(df.m, aes(x = Hugo_Symbol, y = value, fill=variable)) +
  geom_bar(stat='identity') + 
  #geom_text(aes(label=len), vjust=1.6, color="white", size=3.5)+
  #geom_text(stat = "count", aes(label = after_stat(count)), vjust = -1)
  theme(axis.text.x=element_text(angle = 90, vjust = 0.5))

И я попытался с помощью прокомментированного кода добавить счетчик для каждой метки, что-то вроде этого:

enter image description here

но это не работает. Любые идеи? спасибо!

1 Ответ

3 голосов
/ 16 апреля 2020

Без воспроизводимого примера вашего набора данных трудно быть уверенным в том, что будет решением вашего вопроса.

Однако, исходя из вашего кода, похоже, что вы пытаетесь получить диаграмму, представляющую сумму всех значений, наблюдаемых для каждого значения x (с geom_bar(stat = "identity")), и добавить число наблюдений для каждой категории и Каждое значение x с geom_text.

Возможным решением является вычисление этих значений за пределами ggplot2. Вот пример использования iris набора данных. Вы можете сначала изменить свои данные в более длинный формат (как вы сделали с melt), а затем вычислить сумму и количество наблюдений сгруппированных переменных и категорий (я добавляю среднее значение просто для забавы)

library(tidyr)
library(dplyr)

df <- iris %>% pivot_longer(-Species, names_to = "variable", values_to = "val") %>%
  group_by(Species, variable) %>%
  summarise(Mean = mean(val),
            Sum = sum(val),
            count = n())

# A tibble: 12 x 5
# Groups:   Species [3]
   Species    variable      Mean   Sum count
   <fct>      <chr>        <dbl> <dbl> <int>
 1 setosa     Petal.Length 1.46   73.1    50
 2 setosa     Petal.Width  0.246  12.3    50
 3 setosa     Sepal.Length 5.01  250.     50
 4 setosa     Sepal.Width  3.43  171.     50
 5 versicolor Petal.Length 4.26  213      50
 6 versicolor Petal.Width  1.33   66.3    50
 7 versicolor Sepal.Length 5.94  297.     50
 8 versicolor Sepal.Width  2.77  138.     50
 9 virginica  Petal.Length 5.55  278.     50
10 virginica  Petal.Width  2.03  101.     50
11 virginica  Sepal.Length 6.59  329.     50
12 virginica  Sepal.Width  2.97  149.     50

Затем вы можете построить гистограмму следующим образом, используя geom_col (то же самое, что написать geom_bar(stat = "identity"), и разместить вашу метку на столбчатой ​​диаграмме с накоплением с помощью функции position_stack:

library(ggplot2)

ggplot(df, aes(x = variable, y = Sum, fill = Species))+
  geom_col()+
  geom_text(aes(label = count),position = position_stack(0.5))

enter image description here

Отвечает ли он на ваш вопрос?

Если нет, приведите воспроизводимый пример набора данных, следуя этому руководству: Как сделать большой R воспроизводимый пример

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