#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 Я надеюсь, что это может помочь в вашей проблеме 🙂