Эмулировать цветовую палитру ggplot2 по умолчанию
Какую функцию я могу использовать, чтобы эмулировать цветовую палитру ggplot2 по умолчанию для желаемого количества цветов. Например, при вводе 3 будет создан символьный вектор цветов HEX с этими цветами:
5 ответов
Это просто одинаково расставленные тона вокруг цветового круга, начиная с 15:
gg_color_hue <- function(n) {
hues = seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
Например:
n = 4
cols = gg_color_hue(n)
dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)
Все эти ответы очень хороши, но я хотел бы поделиться еще одной вещью, которую я обнаружил в stackru, которая действительно весьма полезна, вот прямая ссылка
По сути, @DidzisElferts показывает, как вы можете получить все цвета, координаты и т. Д., Которые ggplot использует для построения созданного вами графика. Очень хорошо!
p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
ggplot_build(p)$data
[[1]]
fill y count x ndensity ncount density PANEL group ymin ymax xmin xmax
1 #F8766D 5 5 1 1 1 1.111111 1 1 0 5 0.55 1.45
2 #C49A00 47 47 2 1 1 1.111111 1 2 0 47 1.55 2.45
3 #53B400 41 41 3 1 1 1.111111 1 3 0 41 2.55 3.45
4 #00C094 11 11 4 1 1 1.111111 1 4 0 11 3.55 4.45
5 #00B6EB 33 33 5 1 1 1.111111 1 5 0 33 4.55 5.45
6 #A58AFF 35 35 6 1 1 1.111111 1 6 0 35 5.55 6.45
7 #FB61D7 62 62 7 1 1 1.111111 1 7 0 62 6.55 7.45
На странице 106 книги Хэдли Уикхема ggplot2:
Цветовая схема по умолчанию, scale_colour_hue, выбирает равномерно распределенные оттенки вокруг цветового круга hcl.
Немного реверс-инжиниринга вы можете построить эту функцию:
ggplotColours <- function(n = 6, h = c(0, 360) + 15){
if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n
hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}
Демонстрируя это в барплоте:
y <- 1:3
barplot(y, col = ggplotColours(n = 3))
Чтобы получить шестнадцатеричные значения вместо графика, вы можете использовать:
hue_pal()(3)
Вместо этого кода:
show_col(hue_pal()(3))