Degradado de n colores que van desde el color 1 al color 2

108

A menudo trabajo con ggplot2eso hace que los degradados sean agradables ( haga clic aquí para ver un ejemplo ). Tengo la necesidad de trabajar en la base y creo que también scalesse puede usar allí para crear degradados de color, pero estoy muy equivocado sobre cómo. El objetivo básico es generar una paleta de n colores que va desde el color x al color y. Sin embargo, la solución debe funcionar en base. Este fue un punto de partida, pero no hay lugar para ingresar una n.

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

Soy muy consciente de:

brewer.pal(8, "Spectral") 

de RColorBrewer. Estoy buscando más un enfoque similar a cómo ggplot2maneja los degradados que dice que tengo estos dos colores y quiero 15 colores en el camino. ¿Cómo puedo hacer eso?

Tyler Rinker
fuente
1
Creo que necesitas el paquete de balanzas ; las últimas versiones de ggplot2 dependen de esto para el código subyacente. Es decir, no necesita ggplot2 para usar escalas, solo necesita el paquete de escalas . Sin embargo, no tengo idea de cómo funcionan las funciones en escalas :-)
Gavin Simpson
1
Fuera de tema, ya que lo solicitó baseespecíficamente, pero encuentro colourvalues( también en CRAN ) particularmente conveniente para mapear valores a un gradiente. También es bastante ligero (depende de Rcpp).
MichaelChirico
@MichaelChirico No fuera del tema, lo que quise decir fue que necesitaba usar el trazado base porque el paquete que estaba usando estaba escrito en base (creo que wordcloud) en lugar de en cuadrícula. ¿Quizás publicar como respuesta?
Tyler Rinker

Respuestas:

179

colorRampPalette podría ser tu amigo aquí:

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

Y solo para demostrar que funciona:

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

ingrese la descripción de la imagen aquí

thelatemail
fuente
14
Tenga en cuenta que si está particularmente enamorado de una paleta preexistente, por ejemplo brewer.pal(8, "Spectral"), puede dar el vector de colores resultante colorRampPalettepara generar más colores a lo largo de esa rampa. Por ejemplo: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums
¿Qué pasa con el color con las líneas diagonales o formas en el bloque? @thelatemail
user3631848
50

Solo para ampliar la respuesta anterior, se colorRampPalettepueden manejar más de dos colores.

Por lo tanto, para un aspecto más amplio del tipo "mapa de calor", puede ...

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

La imagen resultante:

ingrese la descripción de la imagen aquí

jsol
fuente
¿Puedo especificar también las líneas o formas diagonales en el color? @jsol
user3631848
Me gusta esta paleta, pero hay demasiado verde y muy poco amarillo. ¿Hay alguna forma de corregir esto?
Herman Toothrot
1
Agregando para cualquier otra persona que no esperaba ver una opción como "springgreen" o "royalblue". Todos los colores disponibles para usar se pueden devolver como una lista ejecutando: colors ().
jadki
20

Intente lo siguiente:

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)

ingrese la descripción de la imagen aquí

Daniel Hoop
fuente
¡esta función debe agregarse por defecto en la base R!
Simon C.
7

La respuesta anterior es útil, pero en los gráficos es difícil distinguir entre gradientes de negro más oscuros. Una alternativa que encontré es usar degradados de colores grises de la siguiente manera

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

Más información sobre la escala de grises aquí.

Adicional

Cuando usé el código anterior para diferentes colores como azul y negro, los degradados no eran tan claros. heat.colors()parece más útil.

Este documento tiene información y opciones más detalladas. pdf

Anusha
fuente
2
Creo que esta respuesta es superior para el negro al blanco, pero no se puede generalizar a los colores. Gracias por agregar esta valiosa información. +1
Tyler Rinker
Se agregó un enlace que brinda mejores opciones para degradados de color y matices que funcionan tanto en color como en blanco y negro.
Anusha
@DavidDelMonte Es posible que tenga una copia guardada del archivo pero no el enlace actualizado. Sin embargo, no estoy seguro de dónde cargarlo.
Anusha
2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… consulte archive.org primero siempre.
thelatemail