web-dev-qa-db-fra.com

Gradient de n couleurs allant de la couleur 1 à la couleur 2

Je travaille souvent avec ggplot2 qui fait des gradients Nice ( cliquez ici pour un exemple ). J'ai besoin de travailler en base et je pense que scales peut également être utilisé ici pour créer des dégradés de couleurs, mais je ne comprends absolument pas comment. L'objectif de base est de générer une palette de n couleurs allant de x à y. La solution doit cependant fonctionner en base. C'était un point de départ, mais il n'y a pas de place pour entrer un n.

 scale_colour_gradientn(colours=c("red", "blue"))

Je suis bien conscient de:

brewer.pal(8, "Spectral") 

de RColorBrewer. Je cherche plus l'approche similaire à la façon dont ggplot2 gère les dégradés qui indiquent que j’ai ces deux couleurs et que j’ai besoin de 15 couleurs. Comment puis je faire ça?

92
Tyler Rinker

colorRampPalette pourrait être votre ami ici:

colfunc <- colorRampPalette(c("black", "white"))
colfunc(10)
# [1] "#000000" "#1C1C1C" "#383838" "#555555" "#717171" "#8D8D8D" "#AAAAAA"
# [8] "#C6C6C6" "#E2E2E2" "#FFFFFF"

Et juste pour montrer que ça marche:

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)

enter image description here

155
thelatemail

Juste pour développer la réponse précédente colorRampPalettepeut gérer plus de deux couleurs.

Donc, pour un type plus étendu de "carte thermique", vous pouvez ...

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)

L'image résultante:

enter image description here

48
jsol

Essayez ce qui suit:

color.gradient <- function(x, colors=c("red","yellow","green"), colsteps=100) {
  return( colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )
}
x <- c((1:100)^2, (100:1)^2)
plot(x,col=color.gradient(x), pch=19,cex=2)

enter image description here

15
Daniel Hoop

La réponse ci-dessus est utile, mais dans les graphiques, il est difficile de distinguer les dégradés de noir les plus sombres. Une alternative que j'ai trouvée consiste à utiliser les dégradés de gris comme suit

palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))

Plus d'infos sur l'échelle de gris ici.

Ajouté

Lorsque j'ai utilisé le code ci-dessus pour différentes couleurs comme le bleu et le noir, les dégradés n'étaient pas aussi clairs. heat.colors() semble plus utile.

Ce document contient des informations et des options plus détaillées. pdf

7
Anusha