Предопределенные цвета (масштаб _ * _ руководство)
Простое решение с использованием colorspace::darken()
Это простейшее решение, я думаю:
library(ggplot2)
library(colorspace)
hex_colors = c(
setosa = "#80adf7",
versicolor = "#96ef8f",
virginica = "#f4a1df")
g = ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species, color = Species))
g + geom_boxplot() +
scale_fill_manual(values = hex_colors) +
scale_color_manual(values = darken(hex_colors, amount = 0.3))
Ручной расчет цветов
Если вы хотите иметь больше контроля, вы можете преобразовать HEX в RGB и немного уменьшить все значения красного, зеленого и синего.Вы также можете преобразовать его в HSV и играть с оттенком, насыщенностью и значением яркости, добавив rgb2hsv
к pipelne и вызвав hsv
вместо rgb
в конце.
library(ggplot2)
library(magrittr)
library(purrr)
hex_colors = c(
setosa = "#80adf7",
versicolor = "#96ef8f",
virginica = "#f4a1df")
dark_colors = hex_colors %>%
col2rgb %>% #convert HEX colors to RGB Matrix
"*"(0.7) %>% # make each component "darker"
apply(2, lift_dv(rgb, maxColorValue = 255)) # Convert each column to HEX again
g = ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species, color = Species))
g + geom_boxplot() +
scale_fill_manual(values = hex_colors) +
scale_color_manual(values = dark_colors)
Оба подхода приводят к следующему результату:

Автоматические цвета (шкала _ * _ дискретная)
scale_*_discrete
работает с цветовым пространством HSL.Мы можем просто определить яркость вручную.
library(ggplot2)
g = ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species, color = Species))
g + geom_boxplot() +
scale_fill_discrete(l = 70) + # a bit brighter
scale_color_discrete(l = 50) # a bit darker
