112 votes

Comment changer la couleur de fond d'une parcelle faite avec ggplot2

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

Par exemple, une parcelle produite 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
 

146voto

Jack Edmonds Points 10264

Pour changer 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 les thèmes . Fiche de référence rapide pour les légendes, les axes et les thèmes .

55voto

Silverfish Points 529

Pour éviter obsolète opts et theme_rect d'utilisation:

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

Pour définir votre propre thème personnalisé, basé sur theme_gray mais avec certaines de vos modifications et quelques extras, y compris le contrôle de la ligne de quadrillage de couleur/taille (plus d'options disponibles pour jouer avec lors de 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é par défaut lors de l'ggplot est appelé dans l'avenir, sans masquage:

theme_set(theme_jack())

Si vous souhaitez modifier un élément de la mise thème:

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

Pour stocker le courant du thème par défaut comme un objet:

theme_pink <- theme_get()

Notez que theme_pink est une liste alors qu' theme_jack était une fonction. Donc, pour revenir au thème de theme_jack utiliser theme_set(theme_jack()) alors que pour revenir à theme_pink utiliser theme_set(theme_pink).

Vous pouvez remplacer theme_gray par theme_bw dans la définition de l' theme_jack si vous préférez. Pour votre thème personnalisé pour ressembler theme_bw mais avec tous les quadrillages (x, y, majeurs et mineurs) hors tension:

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, une plus radicale thème utile lors de la représentation choropleths ou d'autres cartes dans ggplot, basé sur la discussion ici, mais mis à jour pour éviter la dépréciation. Le but ici est d'enlever le fond gris, et d'autres fonctionnalités qui pourraient 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) 
        )   
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X