Gradiente di n colori che vanno dal colore 1 al colore 2


108

Ci lavoro spesso ggplot2che rende gradevoli i gradienti ( clicca qui per un esempio ). Ho bisogno di lavorare in base e penso che scalespossa essere usato anche 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 da x color a y color. La soluzione deve però funzionare in base. Questo era un punto di partenza ma non c'è posto per inserire un n.

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

Sono ben consapevole di:

brewer.pal(8, "Spectral") 

da RColorBrewer. Sto cercando di più l'approccio simile a come ggplot2gestisce i gradienti che dice che ho questi due colori e voglio 15 colori lungo la strada. Come lo posso fare?


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

1
Fuori tema visto che hai richiesto baseespressamente, ma trovo colourvalues( anche su CRAN ) particolarmente comodo per mappare i valori ad un gradiente. È anche abbastanza leggero (dipende da Rcpp).
MichaelChirico

@MichaelChirico Non fuori tema, quello che volevo dire era che avevo bisogno di usare il plottaggio di base perché il pacchetto che stavo usando era scritto in base (penso wordcloud) piuttosto che in griglia. Forse pubblicare come risposta?
Tyler Rinker

Risposte:


179

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 solo per dimostrare che funziona:

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

inserisci qui la descrizione dell'immagine


14
Nota che se sei particolarmente innamorato di una tavolozza preesistente, ad esempio brewer.pal(8, "Spectral"), puoi dare il vettore di colori risultante a colorRampPaletteper generare più colori lungo quella rampa. Ad esempio: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums

E il colore con le linee o le forme diagonali nel blocco? @thelatemail
user3631848

50

Solo per espandere la risposta precedente è colorRampPalettepossibile gestire più di due colori.

Quindi per un tipo di "mappa di calore" più espanso puoi ...

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

L'immagine risultante:

inserisci qui la descrizione dell'immagine


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

Mi piace questa tavolozza ma c'è troppo verde e pochissimo giallo. C'è un modo per correggerlo?
Herman Toothrot

1
Aggiunta per chiunque altro non si aspettasse di vedere un'opzione come "springgreen" o "royalblue". Tutti i colori disponibili per l'uso possono essere restituiti come un elenco eseguendo: colors ().
jadki

20

Prova 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)

inserisci qui la descrizione dell'immagine


questa funzione dovrebbe essere aggiunta come impostazione predefinita in R base!
Simon C.

7

La risposta di cui sopra è utile ma nei grafici è difficile distinguere tra sfumature di nero più scure. Un'alternativa che ho trovato è usare le sfumature dei colori grigi 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 qui.

aggiunto

Quando ho usato il codice sopra per colori diversi come il blu e il nero, le sfumature non erano così chiare. heat.colors()sembra più utile.

Questo documento contiene informazioni e opzioni più dettagliate. PDF


2
Penso che questa risposta sia superiore per il nero al bianco ma non è generalizzabile ai colori. Grazie per aver aggiunto queste preziose informazioni. +1
Tyler Rinker

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

@DavidDelMonte Potrei avere una copia salvata del file ma non il collegamento aggiornato. Non sono sicuro di dove caricarlo però.
Anusha

2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… controlla sempre prima archive.org.
recapito
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.