Wie ändere ich die Hintergrundfarbe eines mit ggplot2 erstellten Diagramms?

95

Standardmäßig erzeugt ggplot2 Diagramme mit grauem Hintergrund. Wie ändere ich die Farbe des Hintergrunds des Diagramms?

Zum Beispiel ein Plot, der mit dem folgenden Code erstellt wurde:

library(ggplot2)
myplot<-ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + geom_line()
myplot
Jack Edmonds
quelle

Antworten:

120

Verwenden Sie den folgenden Code, um die Hintergrundfarbe des Bedienfelds zu ändern:

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

Um die Farbe des Diagramms (aber nicht die Farbe des Bedienfelds) zu ändern, haben Sie folgende Möglichkeiten:

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

Weitere Themen finden Sie hier . Kurzreferenzblatt für Legenden, Achsen und Themen .

Jack Edmonds
quelle
39
Es gibt auch die theme_bw, die Ihnen einen weißen Hintergrund und graue Gitterlinien gibt. Ich benutze es die ganze Zeit, da es im Druck viel besser aussieht als der standardmäßige graue Hintergrund:myplot + theme_bw()
ROLO
@ Rolo: Schön! Gibt es eine Möglichkeit, dies standardmäßig auf alle Diagramme anzuwenden?
krlmlr
11
Fügen Sie dies am Anfang Ihres Skripts für Standard-Schwarzweiß- ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
GG-
1
@ROLO, das seine eigene Antwort verdient, insbesondere weil Jacks Antwort die Farbe der Gitterlinien nicht ändert.
naught101
7
Beachten Sie, dass optsund theme_rectin den neueren Versionen von ggplot2 veraltet sind. (0,9,3). So würde die neuere Version des zweiten Befehls werden:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan
50

Um Veraltetheit zu vermeiden optsund zu theme_rectverwenden:

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

So definieren Sie Ihr eigenes benutzerdefiniertes Thema, basierend auf theme_gray, aber mit einigen Ihrer Änderungen und einigen zusätzlichen Extras, einschließlich der Steuerung der Farbe / Größe der Gitterlinie (weitere Optionen zum Spielen unter 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")
    )   
}

So legen Sie Ihr benutzerdefiniertes Design als Standard fest, wenn ggplot in Zukunft ohne Maskierung aufgerufen wird:

theme_set(theme_jack())

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

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

So speichern Sie das aktuelle Standarddesign als Objekt:

theme_pink <- theme_get()

Beachten Sie, dass dies theme_pinkeine Liste ist, während theme_jackeine Funktion war. Um das Thema wieder auf theme_jack zu verwenden theme_set(theme_jack()), kehren Sie zu theme_pink zurück theme_set(theme_pink).

Sie können theme_graydurch theme_bwin der Definition von ersetzen, theme_jackwenn Sie es vorziehen. Damit Ihr benutzerdefiniertes Thema ähnelt, theme_bwaber alle Gitterlinien (x, y, Dur und Moll) 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 Choroplethen oder anderen Karten in ggplot nützlich ist. Es basiert auf der Diskussion hier, wurde jedoch aktualisiert, um eine Ablehnung zu vermeiden. Ziel ist es, den grauen Hintergrund und alle anderen Funktionen zu entfernen, die von der Karte ablenken könnten.

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) 
        )   
}
Silberfisch
quelle
1
Das ist sehr hilfreich, danke. Zu Ihrer Information, ich habe festgestellt, dass das Argument weitergegeben werden plot.backgroundmuss theme. Die anderen Argumente sind optional.
Racing Tadpole
1

Hier ist ein benutzerdefiniertes Thema, um den Hintergrund von ggplot2 weiß zu machen, und eine Reihe weiterer Änderungen, die für Veröffentlichungen und Poster gut sind. Einfach + Mythos anheften. Wenn Sie Optionen nach + Thema nach + Mythos hinzufügen oder ändern möchten, werden nur diese Optionen aus + Mythos ersetzt.

library(ggplot2)
library(cowplot)
theme_set(theme_cowplot())

mytheme = list(
    theme_classic()+
        theme(panel.background = element_blank(),strip.background = element_rect(colour=NA, fill=NA),panel.border = element_rect(fill = NA, color = "black"),
              legend.title = element_blank(),legend.position="bottom", strip.text = element_text(face="bold", size=9),
              axis.text=element_text(face="bold"),axis.title = element_text(face="bold"),plot.title = element_text(face = "bold", hjust = 0.5,size=13))
)

ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + mytheme + geom_line()

benutzerdefiniertes ggplot-Thema

Isaac Zhao
quelle