web-dev-qa-db-fra.com

Utilisation d'une palette de couleurs prédéfinie dans ggplot

Est-ce que quelqu'un sait comment utiliser une palette de couleurs prédéfinie dans ggplot?

J'ai un vecteur de couleurs que j'aimerais utiliser:

rhg_cols <- c("#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B", 
              "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000")

Mais quand j'essaye de le transmettre à rien ne s'est passé

ggplot(mydata, aes(factor(phone_partner_products)), color = rhg_cols) +
  geom_bar()

Vous devez mettre colour = rhg_cols Dans aes(). Pour autant que je sache, vous voulez appliquer un dégradé aux barres (dans barplot) avec une variable de facteur en abscisse? Utilisez ensuite fill - essayez ceci à la place:

ggplot(mydata, aes(factor(phone_partner_products), fill = factor(phone_partner_products))) +
  geom_bar() + 
  scale_fill_manual(values = rhg_cols)

ou essayez d'obtenir une réplique approximative avec:

ggplot(mydata, aes(factor(phone_partner_products), fill = phone_partner_products))) +
  geom_bar() + 
  scale_fill_gradient(low = "#771C19", high = "#000000")

Notez que dans le second cas, une variable continue est passée à fill esthétique, donc scale_fill_gradient Est passé ensuite. Si vous passez un factor au fill aes, vous devez vous en tenir à scale_fill_manual(values = rhg_cols).

34
aL3xa

Si les couleurs sont une palette, utilisez scale_colour_manual:

ggplot(mydata, aes(factor(phone_partner_products), colour = colour_variable)) +
  scale_colour_manual(values = rhg_cols)
23
hadley

Puisque les couleurs que vous voulez SONT les valeurs de l'esthétique des couleurs, ce que vous voulez vraiment, c'est l'échelle identity, dans ce cas scale_fill_identity.

 ggplot(mydata, aes(factor(phone_partner_products)), color=rhg_cols) +
   geom_bar() +
   scale_fill_identity())

Puisque vous n'avez pas fourni de données, je vais utiliser un exemple légèrement différent en utilisant vos données de couleur:

 rhg_cols <- c("#771C19","#AA3929","#E25033","#F27314","#F8A31B",
               "#E2C59F","#B6C5CC","#8E9CA3","#556670","#000000")
 mydata <- sample(rhg_cols, 100, replace = TRUE)
 qplot(mydata, fill = mydata) +
   scale_fill_identity()

enter image description here


remarque: j'ai omis + opts(axis.text.x=theme_text(angle=90)) pour plus de clarté dans l'exemple.

10
Alex Brown

Ajoutez d'abord les couleurs à votre ensemble de données:

mydata$col <- rhg_cols

Mappez ensuite la couleur à cette colonne et utilisez scale_colour_identity

ggplot(mydata, aes(factor(phone_partner_products, colour = col))) + 
  geom_bar() + 
  scale_colour_identity()
10
hadley