Comment changer la couleur d'arrière-plan d'un tracé réalisé avec ggplot2

95

Par défaut, ggplot2 produit des graphiques avec un arrière-plan gris. Comment changer la couleur de l'arrière-plan du tracé?

Par exemple, un tracé produit par le code suivant:

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
la source

Réponses:

120

Pour modifier la couleur d'arrière-plan du panneau, utilisez le code suivant:

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

Pour changer la couleur du tracé (mais pas la couleur du panneau), vous pouvez faire:

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

Voir ici pour plus de détails sur le thème. Fiche de référence rapide pour les légendes, les axes et les thèmes .

Jack Edmonds
la source
39
Il y a aussi le theme_bw, vous donnant un fond blanc et un quadrillage gris. Je l'utilise tout le temps, car en version imprimée, il est bien meilleur que le fond gris par défaut:myplot + theme_bw()
ROLO
@ROLO: Bien! Existe-t-il un moyen d'appliquer cela à tous les tracés par défaut?
krlmlr
11
Mettez ceci au début de votre script pour les ggplots B&W par défaut: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO
1
@ROLO qui mérite sa propre réponse, surtout parce que la réponse de Jack ne change pas la couleur des lignes de la grille.
rien101
7
Notez que optset theme_rectsont obsolètes dans les nouvelles versions de ggplot2. (0.9.3). Ainsi, la nouvelle version de la deuxième commande deviendrait:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan
50

Pour éviter d'être obsolète optset theme_rectutiliser:

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

Pour définir votre propre thème personnalisé, basé sur theme_gray mais avec certains de vos changements et quelques extras ajoutés, y compris le contrôle de la couleur / taille du quadrillage (plus d'options disponibles pour jouer avec sur 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")
    )   
}

Pour faire de votre thème personnalisé le thème par défaut lorsque ggplot sera appelé à l'avenir, sans masquage:

theme_set(theme_jack())

Si vous souhaitez modifier un élément du thème actuellement défini:

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

Pour stocker le thème par défaut actuel en tant qu'objet:

theme_pink <- theme_get()

Notez que theme_pinkc'est une liste alors que theme_jackc'était une fonction. Donc pour retourner le thème à theme_jack utilisez theme_set(theme_jack())alors que pour revenir à theme_pink utilisez theme_set(theme_pink).

Vous pouvez remplacer theme_graypar theme_bwdans la définition de theme_jacksi vous préférez. Pour que votre thème personnalisé ressemble theme_bwmais avec tous les quadrillages (x, y, majeur et mineur) désactivés:

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

Enfin un thème plus radical utile lors du traçage de choroplèthes ou d'autres cartes dans ggplot, basé sur la discussion ici mais mis à jour pour éviter la dépréciation. Le but ici est de supprimer le fond gris et toute autre caractéristique qui pourrait détourner l'attention de la carte.

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) 
        )   
}
Poisson d'argent
la source
1
Ceci est très utile, merci. FYI, j'ai trouvé que l'argument plot.backgrounddoit être transmis theme. Les autres arguments sont facultatifs.
Racing Tadpole
1

Voici un thème personnalisé pour rendre l'arrière-plan ggplot2 blanc et un tas d'autres changements qui sont bons pour les publications et les affiches. Clouez simplement sur + mytheme. Si vous souhaitez ajouter ou modifier des options par + thème après + mytheme, il remplacera simplement ces options de + 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()

thème ggplot personnalisé

Isaac Zhao
la source