Построение парных данных для нескольких групп в ggplot

#r #ggplot2

Вопрос:

Привет, я хочу спросить, как построить парные данные, связанные с линиями в ggplot, в нескольких группах? Некоторые примеры данных для работы:

 set.seed(123)
sample <- data.frame(name = c(rep("Amy",4),rep("Bob",4),rep("Jack",4)),
                     status = rep(c("Before","After"),6),
                     test = rep(c("English","English","Math","Math"),3),
                     score = sample(60:100,12,replace=T))
sample %>% ggplot(aes(x=test,y=score,fill=status))   
  geom_boxplot()   geom_point(size = 2)
 

Идея в том, чтобы иметь test на оси X и score на оси Y, как показано ниже, но вместо того, коробчатой диаграммы, отдельные geom_point() разбиты на status группы (так что точки, которые находятся в after группе, в пространстве, где красный коробчатой диаграммы и точек, которые расположены в before группе в пространстве, где синий коробчатой диаграммы) с geom_line() подключением парные данных пунктов name . Спасибо!

введите описание изображения здесь

Ответ №1:

Самый простой способ-сделать «статус» x-эстетичным и использовать обертку фасета для разделения тестов:

 ggplot(sample, aes(x = status, y = score))   
geom_boxplot(aes(fill = status), alpha = .2)  
geom_line(aes(group = name))   
geom_point(size = 2)   
facet_wrap(~ test)
 

Участок с прямоугольником и линией

Если вам не нужны бокс-графики, вы можете переместить эстетику «группы» на первую строку.

 ggplot(sample, aes(x = status, y = score, group = name))   
geom_line()   
geom_point(size = 2, aes(color = status))   
facet_wrap(~ test, switch = "x")  
scale_x_discrete("")  
theme_minimal()  
theme(legend.position = "top", 
      panel.grid = element_blank(),
      axis.text.x = element_blank(),
      axis.line.y = element_line(size = .5))
 

введите описание изображения здесь

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

1. Спасибо за предложение, огранка в этом случае работает, я все равно хотел бы спросить, знаете ли вы решение, которое сохраняет все на одном графике, так как в реальном наборе данных у меня на самом деле больше групп, и в идеале я бы нарисовал что-то похожее на рисунок 2E в этой публикации: nature.com/articles/s41467-019-11788-4

2. Я думаю, что это зависит от того, что вам нужно: если вы хотите создавать участки такого типа более регулярно, вы можете поискать в Google конкретный пакет для создания участков с уклоном. Если вы хотите узнать о ggplot, вы также можете изучить, как изменять темы. Вы можете использовать фасетирование с несколькими группами, и вы можете сделать фасетирование менее очевидным, создавая почти идентичный график.