Есть ли какой-либо способ использовать 2 цветовые шкалы на одном и том же ggplot?

#r #ggplot2 #colors #geom

Вопрос:

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

 library(ggplot2)

Sample <- c("a", "b")
Time <- c(0,1,2)

df <- expand.grid(Time=Time, Sample = Sample)
df$Value <- c(1,2,3,2,4,6)

ggplot(data = df,
             aes(x = Time,
                 y = Value))  
  geom_point(aes(color = Sample))  
  geom_line(aes(color = Sample))  
  scale_color_manual(values = c("red", "blue"))   #for poits
  scale_color_manual(values = c("orange", "purple")) #for lines
 

Ответ №1:

Используя ggnewscale пакет, это может быть достигнуто следующим образом:

 library(ggplot2)
library(ggnewscale)
Sample <- c("a", "b")
Time <- c(0,1,2)

df <- expand.grid(Time=Time, Sample = Sample)
df$Value <- c(1,2,3,2,4,6)

ggplot(data = df,
       aes(x = Time,
           y = Value))  
  geom_point(aes(color = Sample))  
  scale_color_manual(name = "points", values = c("red", "blue"))   #for poits
  new_scale_color()  
  geom_line(aes(color = Sample))  
  scale_color_manual(name = "lines", values = c("orange", "purple")) #for lines
 

Ответ №2:

Использование цветовых столбцов и идентификатора scale_color_identity:

 df$myCol1 <- rep(c("red", "blue"), each = 3)
df$myCol2 <- rep(c("orange", "purple"), each = 3)

ggplot(data = df,
       aes(x = Time,
           y = Value))  
  geom_point(aes(color = myCol1))  
  geom_line(aes(color = myCol2))  
  scale_color_identity()
 

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