сводная позиция статистики по другому эстетическому параметру в ggplot2

#r #ggplot2

#r #ggplot2

Вопрос:

Я готовлю описательные графики своих данных и столкнулся с конкретной проблемой. Для каждого бокс-графика я показываю количество наблюдений (не спрашивайте меня почему, поэтому они просто хотят этого = D). Если я использую только два параметра в ggplot, проблемы нет. Однако, когда я добавляю параметр эстетического цвета для пола в график. Текст начинает перекрываться или просто размещается между boxplot. Мне кажется, что обязательно нужно добавить новый параметр к функциям (начало кода), которые создали автоматическую позицию сводного текста статистики. Эти новые параметры смогут перемещать текст по оси x влево или вправо, в зависимости от эстетической категории цвета. Но не уверен, как это сделать

 # data
df <- data_frame(id = c(1:50),
                 sex = sample(1:2, 50, replace=T),
                 age = sample(18:50, 50, replace=T),
                 state = sample(state.name[1:4], 50, replace=T))

# auto positioning function
give.n <- function(x){
  return(c(y = median(x)*1.05, label = length(x))) 
  # experiment with the multiplier to find the perfect position
}

# plot
ggplot(df, aes(x= as.factor(state), y = age, color = as.factor(sex)))  
  geom_boxplot()  
  stat_summary(fun.data = give.n, geom = "text", fun.y = median)
 

пример построения графика

Ответ №1:

Это можно исправить с помощью position аргумента, т.Е. Добавить position = position_dodge(width = .75) к stat_summmary :

 # data
set.seed(42)

df <- data.frame(id = c(1:50),
                 sex = sample(1:2, 50, replace=T),
                 age = sample(18:50, 50, replace=T),
                 state = sample(state.name[1:4], 50, replace=T))

# auto positioning function
give.n <- function(x){
  return(c(y = median(x)*1.05, label = length(x))) 
  # experiment with the multiplier to find the perfect position
}

library(ggplot2)

# plot
ggplot(df, aes(x= as.factor(state), y = age, color = as.factor(sex)))  
  geom_boxplot()  
  stat_summary(fun.data = give.n, geom = "text", fun.y = median, position = position_dodge(width = .75))
#> Warning: `fun.y` is deprecated. Use `fun` instead.
 

Комментарии:

1. Ty @stefan, и, конечно же! Я все еще думаю о каком-то сложном решении и забыл указать аргумент (facepalm)

2. ((: Это иногда случается. (;