Farbverlauf von n Farben von Farbe 1 bis Farbe 2

108

Ich arbeite oft damit ggplot2, dass Farbverläufe schön sind ( klicken Sie hier für ein Beispiel ). Ich muss in der Basis arbeiten und ich denke, scalesdass ich dort auch Farbverläufe erstellen kann, aber ich bin völlig daneben. Das grundlegende Ziel besteht darin, eine Palette von n Farben zu generieren, die von x bis y reicht. Die Lösung muss jedoch in der Basis funktionieren. Dies war ein Ausgangspunkt, aber es gibt keinen Ort, an dem ein n eingegeben werden kann.

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

Mir ist klar:

brewer.pal(8, "Spectral") 

von RColorBrewer. Ich suche eher nach einem Ansatz, der dem Umgang ggplot2mit Verläufen ähnelt und besagt, dass ich diese beiden Farben habe und 15 Farben auf dem Weg haben möchte. Wie kann ich das machen?

Tyler Rinker
quelle
1
Ich glaube , Sie brauchen Skalen - Paket; Die neuesten ggplot2- Versionen hängen davon für den zugrunde liegenden Code ab. Dh Sie brauchen nicht ggplot2 Waage zu verwenden, brauchen Sie nur die Skalen - Paket. Keine Ahnung, wie die Funktionen in Skalen funktionieren :-)
Gavin Simpson
1
Off-Topic, da Sie basespeziell angefordert haben , aber ich finde colourvalues( auch auf CRAN ) besonders praktisch, um Werte einem Gradienten zuzuordnen. Es ist auch ziemlich leicht (hängt davon ab Rcpp).
MichaelChirico
@MichaelChirico Nicht vom Thema abweichend, meinte ich, dass ich das Basisplotten verwenden musste, da das von mir verwendete Paket eher in der Basis (ich glaube Wordcloud) als in einem Raster geschrieben war. Vielleicht als Antwort posten?
Tyler Rinker

Antworten:

179

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)

Geben Sie hier die Bildbeschreibung ein

die E-Mail
quelle
14
Beachten Sie, dass Sie, wenn Sie besonders in eine bereits vorhandene Palette verliebt sind, z. B. brewer.pal(8, "Spectral")den resultierenden Farbvektor angeben können colorRampPalette, um mehr Farben entlang dieser Rampe zu generieren. Zum Beispiel : colorRampPalette(brewer.pal(8, "Spectral")).
Jbaums
Was ist mit der Farbe mit den diagonalen Linien oder Formen im Block? @ thelatemail
user3631848
50

Nur um die vorherige Antwort zu erweitern, colorRampPalettekönnen mehr als zwei Farben verarbeitet werden.

Für einen erweiterten "Heat Map" -Typ können Sie also ...

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

Das resultierende Bild:

Geben Sie hier die Bildbeschreibung ein

jsol
quelle
Kann ich auch die diagonalen Linien oder Formen in der Farbe angeben? @jsol
user3631848
Ich mag diese Palette, aber es gibt viel zu viel Grün und sehr wenig Gelb. Gibt es eine Möglichkeit, dies zu korrigieren?
Herman Toothrot
1
Hinzufügen für alle anderen, die nicht erwartet hatten, eine Option wie "springgreen" oder "royalblue" zu sehen. Alle zur Verwendung verfügbaren Farben können durch Ausführen von: colours () als Liste zurückgegeben werden.
Jadki
20

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)

Geben Sie hier die Bildbeschreibung ein

Daniel Hoop
quelle
Diese Funktion sollte standardmäßig in R base hinzugefügt werden!
Simon C.
7

Die obige Antwort ist nützlich, aber in Diagrammen ist es schwierig, zwischen dunkleren Schwarzgradienten zu unterscheiden. Eine Alternative, die ich gefunden habe, besteht darin, graue Farbverläufe wie folgt zu verwenden

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

Mehr Infos zur Graustufe hier.

Hinzugefügt

Als ich den obigen Code für verschiedene Farben wie Blau und Schwarz verwendete, waren die Farbverläufe nicht so klar. heat.colors()scheint nützlicher.

Dieses Dokument enthält detailliertere Informationen und Optionen. pdf

Anusha
quelle
2
Ich denke, diese Antwort ist für Schwarz bis Weiß überlegen, aber für Farben nicht verallgemeinerbar. Vielen Dank, dass Sie diese wertvollen Informationen hinzugefügt haben. +1
Tyler Rinker
Es wurde ein Link hinzugefügt, der bessere Optionen für Farbverläufe und Farbtöne bietet, die sowohl in Farbe als auch in Schwarzweiß funktionieren.
Anusha
@DavidDelMonte Möglicherweise habe ich eine gespeicherte Kopie der Datei, aber nicht den aktualisierten Link. Ich bin mir nicht sicher, wo ich es hochladen soll.
Anusha
2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… Überprüfen Sie immer zuerst archive.org.
E-Mail