Как создать уникальную легенду/цветовую метку для нескольких переменных и графиков в ggplot

#r #ggplot2 #plot #data-visualization

Вопрос:

Я пытаюсь создать страницу с несколькими сюжетами, чтобы сравнить несколько переменных внутри переменных болезни и статуса пациента (т. Е. умершего или выздоровевшего) с течением времени.

Вот мой код

 p1 <- g   geom_smooth(data = sofa_vivo_vs_mortos, aes(x = days, y = sofa_score, color = outcome, group = outcome))   scale_x_continuous(breaks = sofa_vivo_vs_mortos$days) 

  geom_smooth(data = sofa_vivo_vs_mortos, aes(x = days, y = resp_score, color = outcome, group = outcome))   values = c("blue", "red"))   labs(x="Days after admission")

p2 <- g   geom_smooth(data = sofa_vivo_vs_mortos, aes(x = days, y = sofa_score, color = outcome, group = outcome))   scale_x_continuous(breaks = sofa_vivo_vs_mortos$days) 

  geom_smooth(data = sofa_vivo_vs_mortos, aes(x = days, y = coag_score, color = outcome, group = outcome))   labs(x="Days after admission")

ggarrange(p1, p2, labels = c("A", "B"), ncol = 2)

 

Что дает следующий сюжет:

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

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

1-Уникальное расположение легенды для всей страницы

2-цвет легенду для каждой переменной, основываясь не только на его группирующую переменную (в моем коде outcome переменная), но также на имя переменной (т. е. один цвет Legend для sofa_score переменной, в которой outcome = deceased и для другой sofa_score , в которой outcome = recovered , совмещены в один и тот же участок в качестве второй переменной при анализе (то есть переменная resp_score с таким же outcome расслоением)

Аналогичный желаемый результат: Пожалуйста, обратите внимание, что на каждом графике есть 4 строки, по 2 для каждой переменной, по 1 для каждого результата в переменной

Отредактируйте данные для примера:

 df2 <- data.frame(ID = seq(1,32, by=1), sofa_score = sample(1:8, 8, replace = TRUE),  resp_score = sample(1:8, 8, replace = TRUE), 
outcome = c('deceased', 'recovered'), 
days = sample(1:20, 32, replace = TRUE), coag_score = sample(1:8, 8, replace = TRUE))

 

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

1. Не могли бы вы сгенерировать некоторые фиктивные данные с теми же именами переменных и векторными классами, что и ваши реальные данные, чтобы мы могли с ними поиграть?

2. Спасибо, что ответили. Конечно. Я только что отредактировал сообщение с этим, и вот оно: df2 <- data.frame(ID = seq(1,32, by=1), sofa_score = sample(1:8, 8, replace = TRUE), resp_score = sample(1:8, 8, replace = TRUE), outcome = c('deceased', 'recovered'), days = sample(1:20, 32, replace = TRUE), coag_score = sample(1:8, 8, replace = TRUE))

Ответ №1:

Я вообще нахожу, что пакет «пэчворк» отлично подходит для композиции сюжета, включая сбор легенд из нескольких сюжетов. Пример:

 library(ggplot2)
library(patchwork)

set.seed(42)

df2 <- data.frame(
  ID = seq(1,32, by=1), 
  sofa_score = sample(1:8, 8, replace = TRUE),  
  resp_score = sample(1:8, 8, replace = TRUE), 
  outcome = c('deceased', 'recovered'), 
  days = sample(1:20, 32, replace = TRUE), 
  coag_score = sample(1:8, 8, replace = TRUE)
)

p1 <- ggplot(df2, aes(days))  
  geom_smooth(aes(y = coag_score, colour = outcome, group = outcome))  
  scale_colour_manual(
    values = c("tomato", "dodgerblue"),
    name = "Coag Score"
  )

p2 <- ggplot(df2, aes(days))  
  geom_smooth(aes(y = resp_score, colour = outcome, group = outcome))  
  scale_colour_manual(
    values = c("limegreen", "orchid"),
    name = "Resp Score"
  )

p1   p2   plot_layout(guides = "collect")
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
 

Создано 2021-03-17 пакетом reprex (v0.3.0)

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

1. Спасибо вам за быстрый ответ. Точный график, который я ищу, — это тот, в котором вы можете объединить оба Coag графика и Resp Score графики в один с разными цветами для каждой строки, хотя бы потому, что я хочу сравнить две переменные в двух разных состояниях, т. Е. 4 разных строки.