tracer un dégradé?

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Benjamin Leduc
Messages : 158
Enregistré le : 09 Avr 2010, 08:48

tracer un dégradé?

Messagepar Benjamin Leduc » 23 Fév 2015, 22:54

Bonjour,

J'ai des points que je plot en differentes couleurs en RGB.
Je souhaite tracer des lignes en couleur dégradé entre chaque 2 points. Comment faire?

(Bonus: Si je souhaite une surface de couleur dégradé entre tous mes points, comment faire? )
Je dois être Suicide-R

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 24 Fév 2015, 07:48

Bonjour,

une solution consisterait à faire de très nombreux points en utilisant les couleurs de deux points aux extrémités pour définir une palette :

Code : Tout sélectionner

f <- function(x,y, n=100, col=c("green","blue"),...) {
a <- diff(y)/diff(x)
b <- y[-1]-a*x[-1]
x1 <- seq(x[1],x[2], le=n)
y1 <- x1*a+b
cols <- colorRampPalette(c("green", "blue"))(n)
segments(x1[-n], y1[-n], x1[-1], y1[-1], col=cols, ...)
}
plot(c(0,1),c(0,1), col=c("green", "blue"), pch=19)
f(c(0,1), c(0,1), lwd=2)

Après il suffit d'adapter l'idée à plus de deux points pour faire un tracé sur plusieurs points.

Cordialement,
Maxime

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Messagepar Dominique Soudant » 24 Fév 2015, 08:35

J'avais piqué l'astuce suivante sur la R graphGallery

Code : Tout sélectionner

h <- hist(rnorm(100))
# just set the scene and axes
plot( h , border = NA, freq = FALSE, xlab = "", ylab = "",
   main= "Use of clipping and translucency" )

# grab the limits of the region
usr <- par( "usr" )
ncolors <- 100
dy <- ( usr[4] - usr[3] ) / ncolors

# create the colors
colors <- colorRampPalette( c("yellow","orange","red") )(ncolors)

# for each color, clip into a region and redraw the histogram with that color
for( i in 1:ncolors){
  clip( usr[1], usr[2], usr[3] + (i-1) * dy, usr[3] + i*dy )
  plot( h, add = TRUE, axes = FALSE, ylab = "", xlab = "",
     col = colors[i], border = NA, freq = FALSE)
}
# reset the clipping area. See ?clip
do.call( clip, as.list( usr) )
@+


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité