색상 1 및 색상 2 범위의 n 색상 그라데이션


108

저는 종종 ggplot2그라디언트를 멋지게 만드는 작업을 합니다 ( 예를 보려면 여기를 클릭하십시오 ). 베이스에서 작업 할 필요가 scales있고 거기에서 컬러 그래디언트를 만드는데도 사용할 수 있다고 생각 하지만 방법에 대해 심각하게 생각하지 않습니다. 기본 목표는 x 색상에서 y 색상까지의 n 색상 팔레트를 생성하는 것입니다. 솔루션은 기본에서 작동해야합니다. 이것은 시작점 이었지만 n을 입력 할 곳이 없습니다.

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

나는 잘 알고 있습니다 :

brewer.pal(8, "Spectral") 

에서 RColorBrewer. 나는 ggplot2이 두 가지 색상이 있고 15 가지 색상이 필요하다는 그라디언트를 처리 하는 방법과 유사한 접근 방식을 더 찾고 있습니다 . 어떻게 할 수 있습니까?


1
저울 패키지 가 필요하다고 생각합니다 . 최신 ggplot2 버전은 기본 코드에 따라 다릅니다. 즉 , 저울을 사용하기 위해 ggplot2 가 필요하지 않으며 저울 패키지 만 있으면 됩니다. 어떤 아이디어의 기능을 어떻게 저울을 작동합니다 :-)하지만
개빈 심슨

1
base특별히 요청했기 때문에 주제 에서 벗어 났지만 colourvalues( CRAN에서도 ) 값을 그라디언트에 매핑하는 데 특히 편리합니다. 또한 꽤 가볍습니다 (에 따라 다름 Rcpp).
MichaelChirico

@MichaelChirico 주제에서 벗어난 것이 아니라 내가 사용하고있는 패키지가 그리드가 아닌 기본 (워드 클라우드)으로 작성 되었기 때문에 기본 플로팅을 사용해야한다는 의미였습니다. 답변으로 게시 하시겠습니까?
Tyler Rinker

답변:


179

colorRampPalette 여기에서 친구가 될 수 있습니다.

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

그리고 그것이 효과가 있음을 보여주기 위해 :

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

여기에 이미지 설명 입력


14
예를 들어 기존 팔레트에 특히 매혹된다면 brewer.pal(8, "Spectral")결과적인 색상 벡터를에 제공하여 colorRampPalette해당 램프를 따라 더 많은 색상을 생성 할 수 있습니다 . 예 : colorRampPalette(brewer.pal(8, "Spectral")).
jbaums 2014

블록의 대각선 또는 모양이있는 색상은 어떻습니까? @thelatemail
user3631848

50

이전 답변을 확장하기 위해 colorRampPalette두 가지 이상의 색상을 처리 할 수 ​​있습니다.

따라서보다 확장 된 "히트 맵"유형을 보려면 다음을 수행 할 수 있습니다 ....

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

결과 이미지 :

여기에 이미지 설명 입력


색상에 대각선이나 모양을 지정할 수도 있습니까? @jsol
user3631848

나는이 팔레트를 좋아하지만 너무 많은 녹색과 매우 적은 노란색이 있습니다. 이것을 수정하는 방법이 있습니까?
Herman Toothrot

1
"springgreen"또는 "royalblue"와 같은 옵션을 기대하지 않는 다른 사람을 위해 추가합니다. 사용할 수있는 모든 색상은 colors ()를 실행하여 목록으로 반환 할 수 있습니다.
jadki

20

다음을 시도하십시오.

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)

여기에 이미지 설명 입력


이 함수는 R베이스에 기본값으로 추가되어야합니다!
Simon C.

7

위의 답변은 유용하지만 그래프에서는 검은 색의 어두운 그라디언트를 구별하기가 어렵습니다. 내가 찾은 한 가지 대안은 다음과 같이 회색 색상의 그라디언트를 사용하는 것입니다.

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

그레이 스케일에 대한 자세한 정보는 여기를 참조하세요.

추가됨

위의 코드를 파란색과 검정색과 같은 다른 색상에 사용했을 때 그라디언트가 명확하지 않았습니다. heat.colors()더 유용 해 보입니다.

이 문서 에는 더 자세한 정보와 옵션이 있습니다. pdf


2
나는이 대답이 검정색에서 흰색으로 우수하지만 색상으로 일반화되지는 않는다고 생각합니다. 이 귀중한 정보를 추가해 주셔서 감사합니다. +1
Tyler Rinker 2014 년

색상 및 흑백 모두에서 작동하는 색상 그라디언트 및 색조에 대한 더 나은 옵션을 제공하는 링크를 추가했습니다.
Anusha 2014 년

@DavidDelMonte 파일의 저장된 사본이 있지만 업데이트 된 링크는 없을 수 있습니다. 그래도 업로드 할 위치가 확실하지 않습니다.
Anusha

2
@DavidDelMonte은 - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/... 첫 항상 archive.org 확인합니다.
thelatemail
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.