2012-11-12 10 views
69

Spesso lavoro con ggplot2 che rende graduali le sfumature (click here for an example). Ho bisogno di lavorare in base e penso che lo scales possa essere usato lì per creare sfumature di colore, ma sono decisamente fuori luogo su come. L'obiettivo di base è generare una tavolozza di n colori che va dal colore x al colore y. La soluzione deve funzionare in base però. Questo era un punto di partenza, ma non c'è spazio per inserire un n.Gradiente di n colori che vanno dal colore 1 e colore 2

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

Sono ben consapevole di:

brewer.pal(8, "Spectral") 

da RColorBrewer. Sto cercando un approccio simile al modo in cui ggplot2 gestisce i gradienti che dicono che ho questi due colori e voglio 15 colori lungo la strada. Come lo posso fare?

+1

Penso che tu abbia bisogno del pacchetto ** scale **; le ultime versioni ** ggplot2 ** dipendono da questo per il codice sottostante. Cioè non hai bisogno di ** ggplot2 ** per usare le bilance, hai solo bisogno del pacchetto ** scale **. Non ho idea di come funzionano le funzioni in ** scale ** :-) –

risposta

112

colorRampPalette potrebbe essere tuo amico qui:

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

E proprio per dimostrare che funziona:

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

enter image description here

+0

+1 battuto da 8 secondi! – mnel

+1

@mnel - quickdraw win! ;-) – thelatemail

+1

Questo è bello. –

6

La risposta di cui sopra è utile, ma nei grafici, è difficile distinguere tra gradienti più scuri del nero. Un'alternativa che ho trovato è quella di utilizzare i gradienti di colore grigio come segue

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

Maggiori informazioni sulla scala di grigi here.

Aggiunto

Quando ho usato il codice qui sopra per diversi colori come il blu e nero , i gradienti non erano così chiari. heat.colors() sembra più utile.

This document ha informazioni e opzioni più dettagliate. pdf

+1

Penso che questa risposta sia superiore per il nero al bianco, ma non è generalizzabile ai colori. Grazie per aver aggiunto questa preziosa informazione. +1 –

+0

Aggiunto un collegamento che offre opzioni migliori per sfumature di colore e tonalità che funzionano sia a colori che in bianco e nero. – Anusha

+0

Bel collegamento! Molto informativo. –

34

Solo per espandere la risposta precedente colorRampPalette può gestire più di due colori.

Così, per un tipo più espansa "mappa di calore" look potete ....

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

L'immagine risultante:

enter image description here

+0

posso specificare anche le linee diagonali o forme nel colore? @jsol – user3631848

+0

Mi piace questa tavolozza ma c'è troppo verde e molto poco giallo. C'è un modo per correggere questo? –

10

provare quanto segue:

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

Problemi correlati