Если столбцы нанесены с помощью position = "fill"
, тогда geom_text
должен вызвать тот же position_fill
.
В этом примере я буду использовать подмножество встроенного набора данных mtcars
, преобразованного ниже.
library(ggplot2)
library(dplyr)
Data1 %>%
count(Treatment, Gender) %>%
ggplot(aes(x = Treatment, y = n, fill = Gender)) +
geom_col(position = "fill") +
ggtitle("Gender") +
ylab("Fraction") +
theme(axis.text.x = element_text(angle = 90, vjust=0.3, hjust=1)) +
scale_fill_manual("Gender",
values = c("Female" = "pink", "Male" = "light blue",
"Other"="coral", "Prefer not to answer"="violet")) +
geom_text(aes(label = n), position = position_fill(vjust=0.5))

Чтобы поместить итоги столбцов поверх них, следующий код также вычисляет итоги по Treatment
и сохраняет только первое значение по группе Treatment
, присваивая NA
другим элементам SumN
.
Data1 %>%
count(Treatment, Gender) %>%
group_by(Treatment) %>%
mutate(SumN = sum(n),
SumN = c(SumN[1], rep(NA, length(SumN) - 1))) %>%
ungroup() %>%
ggplot(aes(x = Treatment, y = n, fill = Gender)) +
geom_col(position = "fill") +
ggtitle("Gender") +
ylab("Fraction") +
theme(axis.text.x = element_text(angle = 90, vjust=0.3, hjust=1)) +
scale_fill_manual("Gender",
values = c("Female" = "pink", "Male" = "light blue",
"Other"="coral", "Prefer not to answer"="violet")) +
geom_text(aes(label = n), position = position_fill(vjust=0.5)) +
geom_text(aes(y = 1.1, label = SumN), position = position_fill(vjust = 1.2))

Пример данных.
Data1 <- mtcars[mtcars$carb %in% 1:4, c("cyl", "carb")]
names(Data1) <- c("Treatment", "Gender")
Data1$Treatment <- factor(Data1$Treatment)
Data1$Gender <- factor(Data1$Gender,
labels = c("Female", "Male", "Other", "Prefer not to answer"))