Gradiente de n cores variando de cor 1 e cor 2

108

Costumo trabalhar com ggplot2isso torna os gradientes legais ( clique aqui para ver um exemplo ). Eu tenho uma necessidade de trabalhar na base e acho que scalespode ser usado lá para criar gradientes de cor também, mas estou seriamente errado sobre como. O objetivo básico é gerar uma paleta de n cores que variam de x cores a y cores. A solução precisa funcionar na base. Este foi um ponto de partida, mas não há lugar para inserir um n.

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

Estou bem ciente de:

brewer.pal(8, "Spectral") 

de RColorBrewer. Estou procurando mais uma abordagem semelhante à forma como ggplot2lida com gradientes que diz que tenho essas duas cores e quero 15 cores ao longo do caminho. Como eu posso fazer isso?

Tyler Rinker
fonte
1
Acho que você precisa do pacote de balanças ; as versões mais recentes do ggplot2 dependem disso para o código subjacente. Ou seja, você não precisa do ggplot2 para usar escalas, você só precisa do pacote de escalas . Não tenho ideia de como as funções em escalas funcionam :-)
Gavin Simpson
1
Fora do tópico, já que você solicitou baseespecificamente, mas acho colourvalues( também no CRAN ) particularmente conveniente para mapear valores para um gradiente. Também é muito leve (depende Rcpp).
MichaelChirico
@MichaelChirico Não fora do tópico, o que eu quis dizer é que eu precisava usar plotagem de base porque o pacote que estava usando foi escrito em base (acho que wordcloud) em vez de grade. Talvez postar como resposta?
Tyler Rinker

Respostas:

179

colorRampPalette poderia ser seu amigo aqui:

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

E só para mostrar que funciona:

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

insira a descrição da imagem aqui

thelatemail
fonte
14
Observe que se você está particularmente apaixonado por uma paleta pré-existente, por exemplo brewer.pal(8, "Spectral"), você pode fornecer o vetor de cores resultante colorRampPalettepara gerar mais cores ao longo dessa rampa. Por exemplo: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums de
E quanto à cor com as linhas diagonais ou formas no bloco? @thelatemail
user3631848
50

Apenas para expandir a resposta anterior colorRampPalettepode lidar com mais de duas cores.

Portanto, para uma aparência do tipo "mapa de calor" mais expandida, você pode ...

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

A imagem resultante:

insira a descrição da imagem aqui

jsol
fonte
também posso especificar as linhas diagonais ou formas na cor? @jsol
user3631848
Eu gosto dessa paleta, mas há muito verde e muito pouco amarelo. Há uma maneira de corrigir isto?
Herman Toothrot
1
Adicionando para qualquer pessoa que não esperava ver uma opção como "springgreen" ou "royalblue". Todas as cores disponíveis para uso podem ser retornadas como uma lista executando: colors ().
jadki,
20

Experimente o seguinte:

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)

insira a descrição da imagem aqui

Daniel Hoop
fonte
esta função deve ser adicionada como padrão na base R!
Simon C.
7

A resposta acima é útil, mas em gráficos é difícil distinguir entre gradientes mais escuros de preto. Uma alternativa que encontrei é usar gradientes de cores cinza como segue

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

Mais informações sobre a escala de cinza aqui.

Adicionado

Quando usei o código acima para cores diferentes como azul e preto, os gradientes não eram tão claros. heat.colors()parece mais útil.

Este documento contém informações e opções mais detalhadas. pdf

Anusha
fonte
2
Acho que essa resposta é superior para preto com branco, mas não pode ser generalizada para cores. Obrigado por adicionar esta informação valiosa. +1
Tyler Rinker
Adicionado um link que oferece melhores opções para gradientes de cores e matizes que funcionam tanto em cores como em P&B.
Anusha
@DavidDelMonte Posso ter uma cópia salva do arquivo, mas não o link atualizado. Não tenho certeza de onde fazer o upload.
Anusha
2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… verifique sempre o archive.org primeiro.
thelatemail