Frage Farbverlauf von n Farben von Farbe 1 und Farbe 2


Ich arbeite oft mit ggplot2 das macht Gradienten schön (Klicken Sie hier für ein Beispiel). Ich muss in der Basis arbeiten und ich denke scales kann dort auch verwendet werden, um Farbverläufe zu erzeugen, aber ich bin völlig daneben. Das grundlegende Ziel ist die Erzeugung einer Palette von n Farben, die von x Farbe zu y Farbe reicht. Die Lösung muss jedoch in der Basis funktionieren. Dies war ein Ausgangspunkt, aber es gibt keinen Ort, um ein n einzugeben.

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

Ich bin mir bewusst:

brewer.pal(8, "Spectral") 

von RColorBrewer. Ich suche mehr nach dem Ansatz ähnlich wie ggplot2 Griffe Gradienten, die besagt, dass ich diese zwei Farben habe und ich möchte 15 Farben auf dem Weg. Wie kann ich das machen?


75
2017-11-12 23:16


Ursprung


Antworten:


colorRampPalette könnte dein Freund hier sein:

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

Und nur um zu zeigen, dass es funktioniert:

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

enter image description here


125
2017-11-12 23:21



Nur um die vorherige Antwort zu erweitern colorRampPalettekann mehr als zwei Farben behandeln.

Also für eine erweiterte "heat map" aussehen können Sie ....

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

Das resultierende Bild:

enter image description here


37
2018-05-29 15:41



Versuche Folgendes:

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


11
2018-02-26 16:04



Die obige Antwort ist nützlich, aber in Graphen ist es schwierig, zwischen dunkleren Farbverläufen von Schwarz zu unterscheiden. Eine Alternative, die ich gefunden habe, ist die Verwendung von Graustufengradienten wie folgt

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

Weitere Informationen zur Grauskala Hier. 

Hinzugefügt 

Wenn ich den obigen Code für verschiedene Farben wie blau und schwarz verwendete, waren die Gradienten nicht so klar. heat.colors() scheint nützlicher zu sein.

Dieses Dokument hat detailliertere Informationen und Optionen. pdf


6
2017-09-24 11:30