Назначить одинаковые цвета переменным того же класса в ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

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

 library(tidyverse)

dat <- data.frame(class = rep(LETTERS[1:3],each=2),
                  instance = 1:6,
                  values = rnorm(6))

ggplot(dat, aes(instance, values))  
  geom_point(aes(color=class))
  

Например, поскольку оба 1 и 2 находятся в классе A , цвета для каждого экземпляра должны быть одинаковыми. Чтобы уточнить, цвета должны быть похожими, но не идентичными, чтобы вы все равно могли сказать, что есть два разных экземпляра.

Ответ №1:

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

 library(dplyr)
library(ggplot2)

dat <- data.frame(class = rep(LETTERS[1:3], each=2),
                  instance = 1:6,
                  values = rnorm(6))

ggplot(dat, aes(instance, values))  
  geom_point(aes(color = class),
             alpha = rep(c(1, 0.5), nrow(dat)/2))
  

Это дает нам:

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

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

1. Это действительно интересно. Я об этом не подумал. Спасибо!

Ответ №2:

Возможно, одним из решений было бы создать настраиваемую палитру цветов, а затем назначить в соответствии с уникальным количеством классов и экземпляров. Здесь код:

 library(tidyverse)
#Data
dat <- data.frame(class = rep(LETTERS[1:3],each=2),
                  instance = 1:6,
                  values = rnorm(6))
#Color for plot
colfunc <- colorRampPalette(c("green", "red"))
#Plot
ggplot(dat, aes(factor(instance), values,fill=factor(instance),group=factor(instance)))  
  geom_point(aes(color=class),shape=21) 
  scale_color_manual(values=colfunc(length(unique(dat$class)))) 
  scale_fill_manual(values = colfunc(length(unique(dat$instance))))
  

Вывод:

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

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

1. Цвета для каждого экземпляра в классе выглядят одинаково на графике выше. Извините, если я был недостаточно конкретен: цвета должны быть похожими, но не идентичными, чтобы вы все равно могли сказать, что есть два разных экземпляра.

2. @Adam_G Привет. Я добавил новое возможное решение. Я надеюсь, что это может быть полезно!

3. Спасибо. Это интересная идея использовать разные цвета для заливки и контура. Если никто не публикует другую идею, я могу согласиться с ней.

4. @Adam_G Я надеюсь, что это может помочь в вашей проблеме 🙂