studio - Emulieren Sie die Standard-Farbpalette von ggplot2




title boxplot (5)

Mit welcher Funktion kann ich die Standard-Farbpalette 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:


Answers

Es ist nur gleichmäßig verteilt Farbtöne um das Farbrad, ab 15:

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)


Ab Seite 106 des ggplot2-Buches von Hadley Wickham:

Das Standardfarbschema scale_colour_hue wählt gleichmäßig beabstandete Farbtöne um das hcl-Farbrad.

Mit ein bisschen Reverse Engineering können Sie diese Funktion konstruieren:

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

Dies im Barplot demonstrieren:

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


Dies ist das Ergebnis von

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

show_col(hue_pal()(3))


Diese Antworten sind alle sehr gut, aber ich wollte eine andere Sache teilen, die ich auf entdeckt habe, die wirklich sehr nützlich ist, hier ist der direkte Link

Im Wesentlichen zeigt @DidzisElferts, wie Sie alle Farben, Koordinaten usw. erhalten, die ggplot verwendet, um ein von Ihnen erstelltes Diagramm zu erstellen. 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

Um veraltete theme_rect und theme_rect zu vermeiden, verwenden Sie:

myplot + theme(panel.background = element_rect(fill='green', colour='red'))

Um dein eigenes Theme zu definieren, basierend auf theme_gray, aber mit einigen deiner Änderungen und ein paar zusätzlichen Extras, einschließlich der Kontrolle über die Gridline-Farbe / Größe (weitere Optionen zum Spielen mit ggplot2.org ):

theme_jack <- function (base_size = 12, base_family = "") {
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            axis.text = element_text(colour = "white"),
            axis.title.x = element_text(colour = "pink", size=rel(3)),
            axis.title.y = element_text(colour = "blue", angle=45),
            panel.background = element_rect(fill="green"),
            panel.grid.minor.y = element_line(size=3),
            panel.grid.major = element_line(colour = "orange"),
            plot.background = element_rect(fill="red")
    )   
}

Um Ihr benutzerdefiniertes Design zum Standard zu machen, wenn ggplot in Zukunft aufgerufen wird, ohne zu maskieren:

theme_set(theme_jack())

Wenn Sie ein Element des aktuell eingestellten Themas ändern möchten:

theme_update(plot.background = element_rect(fill="pink"), axis.title.x = element_text(colour = "red"))

So speichern Sie das aktuelle Standardthema als Objekt:

theme_pink <- theme_get()

Beachten Sie, dass theme_pink eine Liste ist, während theme_jack eine Funktion war. Um das Theme auf theme_jack zurückzusetzen, verwenden Sie theme_set(theme_jack()) Um zu theme_pink zurückzukehren, verwenden Sie theme_set(theme_pink) .

Sie können theme_gray durch theme_bw in der Definition von theme_jack wenn Sie bevorzugen. Wenn Ihr benutzerdefiniertes theme_bw ähnelt, aber alle Gitterlinien (x, y, major und minor) deaktiviert sind:

theme_nogrid <- function (base_size = 12, base_family = "") {
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            panel.grid = element_blank()
    )   
}

Schließlich ein radikaleres Thema, das beim Zeichnen von choropleths oder anderen Maps in ggplot nützlich ist, basierend auf der Diskussion here aber aktualisiert, um eine Abwertung zu vermeiden. Ziel ist es, den grauen Hintergrund und alle anderen Funktionen, die von der Karte ablenken könnten, zu entfernen.

theme_map <- function (base_size = 12, base_family = "") {
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            axis.line=element_blank(),
            axis.text.x=element_blank(),
            axis.text.y=element_blank(),
            axis.ticks=element_blank(),
            axis.ticks.length=unit(0.3, "lines"),
            axis.ticks.margin=unit(0.5, "lines"),
            axis.title.x=element_blank(),
            axis.title.y=element_blank(),
            legend.background=element_rect(fill="white", colour=NA),
            legend.key=element_rect(colour="white"),
            legend.key.size=unit(1.2, "lines"),
            legend.position="right",
            legend.text=element_text(size=rel(0.8)),
            legend.title=element_text(size=rel(0.8), face="bold", hjust=0),
            panel.background=element_blank(),
            panel.border=element_blank(),
            panel.grid.major=element_blank(),
            panel.grid.minor=element_blank(),
            panel.margin=unit(0, "lines"),
            plot.background=element_blank(),
            plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"),
            plot.title=element_text(size=rel(1.2)),
            strip.background=element_rect(fill="grey90", colour="grey50"),
            strip.text.x=element_text(size=rel(0.8)),
            strip.text.y=element_text(size=rel(0.8), angle=-90) 
        )   
}




r ggplot2