web-dev-qa-db-de.com

Emulieren Sie die Standardfarbpalette ggplot2

Mit welcher Funktion kann ich die Standardfarbpalette von ggplot2 für eine gewünschte Anzahl von Farben emulieren. Zum Beispiel würde eine Eingabe von 3 einen Zeichenvektor von HEX-Farben mit diesen Farben erzeugen: enter image description here

159
SFun28

Die Farbtöne im Farbkreis sind ab 15 gleich verteilt:

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

Beispielsweise:

n = 4
cols = gg_color_hue(n)

dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)

enter image description here

225
John Colby

Dies ist das Ergebnis von

library(scales)
show_col(hue_pal()(4))

Four color ggplot

show_col(hue_pal()(3))

Three color ggplot

104

Diese Antworten sind alle sehr gut, aber ich wollte noch etwas mitteilen, das ich beim Stackoverflow entdeckt habe und das wirklich sehr nützlich ist. Hier ist der direkter Link

Grundsätzlich zeigt @DidzisElferts, wie Sie alle Farben, Koordinaten usw. abrufen können, die ggplot zum Erstellen eines von Ihnen erstellten Diagramms verwendet. Sehr schön!

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
55
Josh Morel

Ab Seite 106 des ggplot2-Buches von Hadley Wickham:

Das Standardfarbschema scale_colour_hue wählt gleichmäßig verteilte Farbtöne um das Farbrad aus.

Mit ein wenig Reverse Engineering können Sie diese Funktion erstellen:

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)
}

Demonstration dies in Barplot:

y <- 1:3
barplot(y, col = ggplotColours(n = 3))

enter image description here

41
Andrie