Без воспроизводимого примера вашего набора данных трудно быть уверенным в том, что будет решением вашего вопроса.
Однако, исходя из вашего кода, похоже, что вы пытаетесь получить диаграмму, представляющую сумму всех значений, наблюдаемых для каждого значения 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))
Отвечает ли он на ваш вопрос?
Если нет, приведите воспроизводимый пример набора данных, следуя этому руководству: Как сделать большой R воспроизводимый пример