색상 1과 색상 2의 범위에서 n가지 색상의 그라데이션
저는 종종 함께 일합니다.ggplot2
그라데이션을 좋게 만듭니다(예를 들어 여기를 클릭).저는 기지에서 일할 필요가 있고 저는 생각합니다.scales
색 그라데이션을 만드는 데도 사용할 수 있지만 어떻게 하는지는 잘 모르겠어요.기본적인 목표는 x 색상에서 y 색상에 이르는 n색 팔레트를 생성하는 것입니다.그러나 솔루션은 기본적으로 작동해야 합니다.여기가 출발점이었는데 n을 입력할 곳이 없습니다.
scale_colour_gradientn(colours=c("red", "blue"))
저는 다음을 잘 알고 있습니다.
brewer.pal(8, "Spectral")
부터RColorBrewer
나는 더 많은 방법을 찾고 있습니다.ggplot2
이 두 가지 색상을 가지고 있으며 15가지 색상을 원하는 그라데이션을 처리합니다.내가 어떻게 그럴 수 있을까?
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)
이전 답변을 확장하기 위해colorRampPalette
두 가지 이상의 색상을 처리할 수 있습니다.
그래서 좀 더 확장된 "열 지도" 유형의 외관을 위해….
colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)
결과 이미지:
다음을 시도합니다.
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)
편집
제가 이 기능이 다른 제안된 솔루션보다 우수하다고 생각하는 이유를 설명해 보겠습니다.
그림에 사용한 지수 데이터에 대해 jsol에서 제안한 함수를 적용해 보겠습니다.다음을 사용하여 두 가지 변형을 시도합니다.range
그리고.length
할 때에colfunc
.
결과:단순히 의도한 대로 작동하지 않습니다.
colfunc <- colorRampPalette(c("red","yellow","springgreen","royalblue"))
x <- c((1:100)^2, (100:1)^2)
plot(x, col=colfunc(range(x)), pch=19,cex=2)
plot(x, col=colfunc(length(x)), pch=19,cex=2)
위의 답변은 유용하지만 그래프에서는 검은색의 어두운 그라데이션을 구별하기가 어렵습니다.제가 찾은 한 가지 대안은 다음과 같이 회색의 그라데이션을 사용하는 것입니다.
palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))
그레이 스케일에 대한 자세한 내용은 여기를 참조하십시오.
추가된
파란색과 검은색과 같은 다른 색상에 대해 위의 코드를 사용했을 때 그라데이션이 그리 명확하지 않았습니다. heat.colors()
더 유용할 것 같습니다.
이 문서에는 더 자세한 정보와 옵션이 나와 있습니다.pdf
대안적인 접근법(이전의 답변보다 더 좋을 필요는 없습니다!)은 다음을 사용하는 것입니다.viridis
꾸러미여기에서 설명하는 것처럼 두 가지 이상의 색상을 기준으로 다양한 색상 그라데이션을 사용할 수 있습니다.
패키지는 사용하기 매우 쉽습니다 - 당신은 단지 교체하기만 하면 됩니다.ggplot2
스케일 채우기 함수(예:scale_fill_gradient(low = "skyblue", high = "dodgerblue4")
) 동등한 값으로viridis
기능.
따라서 이 그림의 코드를 변경합니다.
ggplot(mtcars, aes(wt*1000, mpg)) +
geom_point(size = 4, aes(colour = hp)) +
xlab("Weight (pounds)") + ylab("Miles per gallon (MPG)") + labs(color='Horse power') +
scale_x_continuous(limits = c(1000, 6000),
breaks = c(seq(1000,6000,1000)),
labels = c("1,000", "2,000", "3,000", "4,000", "5,000", "6,000")) +
scale_fill_gradient(low = "skyblue", high = "dodgerblue4") +
theme_classic()
다음을 생성하는 요소:
다음을 사용하는 이 작업에viridis
:
ggplot(mtcars, aes(wt*1000, mpg)) +
geom_point(size = 4, aes(colour = factor(cyl))) +
xlab("Weight (pounds)") + ylab("Miles per gallon (MPG)") + labs(color='Number\nof cylinders') +
scale_x_continuous(limits = c(1000, 6000),
breaks = c(seq(1000,6000,1000)),
labels = c("1,000", "2,000", "3,000", "4,000", "5,000", "6,000")) +
scale_color_viridis(discrete = TRUE) +
theme_classic()
두 번째 줄부터 마지막 줄까지 유일한 차이점은 다음과 같습니다.scale_color_viridis(discrete = TRUE)
.
이 그림은 다음을 사용하여 생성됩니다.viridis
:
누군가가 이것을 유용하게 생각하기를 바랍니다. 이것이 제가 이 질문을 받고 사용하게 된 해결책이기 때문입니다.
언급URL : https://stackoverflow.com/questions/13353213/gradient-of-n-colors-ranging-from-color-1-and-color-2
'programing' 카테고리의 다른 글
패키지에서 setup.py (setuptools)에 정의된 버전을 가져오려면 어떻게 해야 합니까? (0) | 2023.06.05 |
---|---|
UITableViewController가 없는 UIRefreshControl (0) | 2023.06.05 |
Android 8: 일반 텍스트 HTTP 트래픽이 허용되지 않음 (0) | 2023.06.05 |
스레드화 모듈과 멀티프로세싱 모듈의 차이점은 무엇입니까? (0) | 2023.06.05 |
키보드를 표시하고 숨길 때 탐지하는 방법 (0) | 2023.06.05 |