Положение аргумента geom_text для установки различных тегов - PullRequest
1 голос
/ 07 июня 2019

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

У меня проблемы с кодом geom_text, так как я не знаю, какую позицию мне следует попробовать. У меня есть разные варианты ввода, но когда я это делаю, мой график искажается следующим образом.

enter image description here

Это код, который я использую

Data1 %>% 
  count(Treatment, Gender) %>% 
  ggplot(aes(Treatment, n))+ 
  geom_col(aes(fill = Gender), 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_stack(vjust=0.5))

Если я правильно прочитал другие посты, position_stack должен поместить числа внутри каждого бара.

1 Ответ

1 голос
/ 07 июня 2019

Если столбцы нанесены с помощью 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))

enter image description here

Чтобы поместить итоги столбцов поверх них, следующий код также вычисляет итоги по 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))

enter image description here

Пример данных.

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"))
...