Come cambio il colore di sfondo di un grafico creato con ggplot2


95

Per impostazione predefinita, ggplot2 produce grafici con uno sfondo grigio. Come cambio il colore dello sfondo della trama?

Ad esempio, un grafico prodotto dal codice seguente:

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

Risposte:


120

Per modificare il colore di sfondo del pannello, utilizza il codice seguente:

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

Per cambiare il colore della trama (ma non il colore del pannello), puoi fare:

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

Vedi qui per maggiori dettagli sul tema Foglio di riferimento rapido per leggende, assi e temi .


39
C'è anche il theme_bw, che ti dà uno sfondo bianco e una griglia grigia. Lo uso sempre, poiché in stampa sembra molto meglio dello sfondo grigio predefinito:myplot + theme_bw()
ROLO

@ROLO: Bello! C'è un modo per applicarlo a tutti i grafici per impostazione predefinita?
krlmlr

11
Mettilo all'inizio del tuo script per i ggplots in bianco e nero predefiniti: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO

1
@ROLO che merita la sua risposta, soprattutto perché la risposta di Jack non cambia il colore delle linee della griglia.
nought101

7
Nota che optse theme_rectsono deprecati nelle versioni più recenti di ggplot2. (0.9.3). Quindi la versione più recente del secondo comando diventerebbe:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan

50

Per evitare deprecato optse theme_rectutilizzare:

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

Per definire il tuo tema personalizzato, basato su theme_gray ma con alcune delle tue modifiche e alcuni extra aggiunti incluso il controllo del colore / dimensione della griglia (più opzioni disponibili con cui giocare su 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")
    )   
}

Per rendere il tuo tema personalizzato predefinito quando ggplot verrà chiamato in futuro, senza mascherare:

theme_set(theme_jack())

Se desideri modificare un elemento del tema attualmente impostato:

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

Per memorizzare il tema predefinito corrente come oggetto:

theme_pink <- theme_get()

Nota che theme_pinkè una lista mentre theme_jackera una funzione. Quindi, per restituire il tema a theme_jack usa theme_set(theme_jack())mentre per tornare a theme_pink usa theme_set(theme_pink).

Puoi sostituire theme_graycon theme_bwnella definizione di theme_jackse preferisci. Affinché il tuo tema personalizzato assomigli theme_bwma con tutte le linee della griglia (x, y, maggiore e minore) disattivate:

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

Infine un tema più radicale utile quando si tracciano coropleti o altre mappe in ggplot, basato sulla discussione qui ma aggiornato per evitare deprecazioni. L'obiettivo qui è rimuovere lo sfondo grigio e qualsiasi altra caratteristica che potrebbe distrarre dalla mappa.

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

1
Questo è molto utile, grazie. Cordiali saluti, ho scoperto che l'argomento plot.backgrounddeve essere passato a theme. Gli altri argomenti sono facoltativi.
Racing Tadpole

1

Ecco un tema personalizzato per rendere bianco lo sfondo di ggplot2 e una serie di altre modifiche utili per pubblicazioni e poster. Basta attaccare + mytheme. Se vuoi aggiungere o modificare le opzioni di + tema dopo + mytheme, sostituirà semplicemente quelle opzioni da + mytheme.

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

tema ggplot personalizzato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.