Comment automatiser votre palette de couleurs RGB ?

palette de couleurs RGB

Table des matières

Lorsqu’on réalise une représentation graphique avec ggplot2, et que l’on souhaite employer des couleurs bien précises, généralement, soit on les nomme en toute lettre, soit on utilise leur code hexadécimal.

Mais comment faire quand on ne dispose que des codes RGB ?

Je vous montre cela en pas à pas, ainsi qu’une astuce pour créer et automatiser une palette de couleurs.

Nommer les couleurs en toute lettre

Pour spécifier les couleurs en toute lettre, on utilise ce type de code : 

library(ggplot2)
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, colour=Species))+
    geom_point(size=3)+
     scale_colour_manual(values=c("magenta", "orange", "blue")) 
nommer les couleurs en toute lettre

Les noms des couleurs peuvent être retrouvés dans le document Colors in R, que vous pouvez télécharger ici.

Voici un extrait de ce document : 

Nommer les couleurs avec leur code hexadécimal

On peut également nommer les couleurs avec leur code hexadécimal, comme ceci, par exemple : 

ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point(size=3)+
    scale_colour_manual(values=c("#FF8C00", "#A020F0", "#008B8B")) 
couleurs par code hexadécimal

Pour obtenir le code hexadécimal, il y a plusieurs solutions :

Nommer les couleurs avec leur code RGB

Si ce code RGB est exprimé en proportion, par exemple Red=0.1, Green=0.8, et Blue=0.5, dans cette situation, on peut employer la fonction rgb() du package grDevices qui convertit un code rgb en code hexdecimal.

On peut stocker les codes dans des objets, en faire un vecteur, puis utiliser ce vecteur en argument d’une fonction scale_colour_manual(), par exemple,  comme ceci :

colour1 <- rgb(0.1,0.8,0.5)
colour1
## [1] "#1ACC80"
colour2 <- rgb(0.8,0.6,0.3)
colour2
## [1] "#CC994D"
colour3 <- rgb(0.6,0.5,0.8)
colour3
## [1] "#9980CC"
mycolours <- c(colour1, colour2, colour3)
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point(size=3)+
    scale_colour_manual(values=mycolours) 
couleurs spécifiées avec un code rgb

Ou bien utiliser directement la syntaxe I(rgb(val_red, val_green, val_blue)) dans le code, comme ceci :

library(ggplot2)
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point(size=3)+
    scale_colour_manual(values=c(I(rgb(0,0,0.9)),
                                 I(rgb(0,0.8,0.4)), 
                                 I(rgb(0.5,0,1)))) 

Si le code RGB est exprimé de 0 à 255, par exemple rgb(26, 204,153), il suffit d’ajouter l’argument maxColorValue = 255, dans la fonction rgb(). Par exemple : 

col1 <- rgb(26,204,128, maxColorValue = 255)
col1
## [1] "#1ACC80" 

Automatiser la définition d'une palette

 Imaginons que vous travaillez pour une organisation (une entreprise, un labo, une fac, une association,  etc… ) qui possède une charte graphique,  avec cette palette de couleurs, et que vous devez employer ces couleurs pour réaliser vos graphiques :

Comme vous n’allez pas retaper les codes HEX ou RGB à chaque graphique, vous pouvez commencer par définir votre palette, comme ceci : 

mauve <- c("#afa3ea")
jaune <- c("#f6f335")
rose <- c("#ff306a")
violet <- c("#882f63")
vert <- c("#42c220") 

Et ensuite utiliser les couleurs, avec ggplot2, comme ceci : 

library(ggplot2)
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point(size=3)+
    scale_colour_manual(values=c(rose, vert, mauve)) 

Mais pour éviter de redéfinir vos couleurs à chaque session R, ce que vous pouvez faire c’est les inclure dans un fichier .Rprofile.  Il s’agit d’un fichier qui est exécuté à chaque ouverture de session R.

Un fichier .Rprofile peut être défini spécifiquement pour un seul projet R (il ne sera exécuté que pour ce projet) ou bien pour tous les projets R.

Pour créer un fichier  .Rprofile pour un seul projet R – celui sur lequel vous travaillez actuellement (c’est ce que je vous recommande de faire, au moins pour essayer ), vous pouvez employer les commandes suivantes. Cela va créer un fichier .Rprofile, à la racine du dossier.

usethis::edit_r_profile(scope="project") 

Pour un fichier .Rprofile global, il suffit de remplacer l’argument scope="project", par scope="user", comme ceci : 

usethis::edit_r_profile(scope="user") 

Le fichier sera créé au niveau de votre dossier R, pour moi : C:/Users/clair/Documents/.Rprofile

Remarque : vous pouvez simplement faire File –> new File –> Rscript , et le nommer .Rprofile.

Et dans ce fichier .RProfile, vous pouvez copier coller ce code : 

library(grDevices)
mauve <- rgb(175,163,234, maxColorValue = 255)
jaune <- rgb(246,243,253, maxColorValue = 255)
rose <- rgb(255,48,106, maxColorValue = 255)
violet <- rgb(136,47,99, maxColorValue = 255)
vert <- rgb(66,194,32, maxColorValue = 255)


couleurs  <- c("mauve", "jaune", "rose", "violet", "vert")
code_couleurs <- c(mauve, jaune, rose, violet, vert)
mes_couleurs <- data.frame(couleurs, code_couleurs)

print("j'ai bien chargé les couleurs:")
print(mes_couleurs)
 

Comme ceci : 

N’oubliez pas de sauvegarder, et le tour est joué !

A chaque ouverture de session R, vous obtiendrez un message vous informant que les couleurs ont bien été chargées, et vous pourrez voir les objets correspondant apparaître dans le workspace :

Et ensuite vous pouvez employer vos couleurs, comme ceci, par exemple :

library(ggplot2)
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point(size=3)+
    scale_colour_manual(values=c(rose, vert, mauve)) 
couleurs avec palette rgb

J’espère que cet article vous sera utile pour gérer vos palettes de couleurs spécifiques, ou qu’il vous aura permis de découvrir comment utiliser un fichier .Rprofile. 

A ce sujet, vous, qu’est ce que vous mettez dans vos fichiers .Rprofile?  S’il vous plait, partagez vos habitudes et astuces en les indiquant en commentaires !

Si cet article vous a plu, ou vous a été utile, vous pouvez le partager, et soutenir le blog en réalisant un don libre sur la page Tipeee.

Poursuivez votre lecture

3 réponses

  1. Merci Claire pour cet article.
    Vous venez de me donner une idée. Au lieu d’importer à chaque fois les packages, je pourrais mettre ceux qui sont les plus utilisés dans un fichier .Rprofile.

    1. Bonjour,

      oui ça peut être une bonne idée mais attention au fait que votre code (dans votre script) ne sera plus totalement “reproductible” car il reposera aussi sur le fichier .Rprofile.C’est comme si vous aviez un bout de script caché.
      Bonne continuation.

  2. De plus, lors de l’installation ou de la mise à jour de packages, le chargement automatique des packages via .Rprofile en tout début de session peut poser problème.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.