R에서 시각적으로 매력적인 밀도 열지도 생성


27

R에 히트 맵을 생성하는 일련의 함수가 있다는 것을 알고 있지만 문제는 시각적으로 매력적인 맵을 생성 할 수 없다는 것입니다. 예를 들어 아래 이미지는 피하고 싶은 히트 맵의 좋은 예입니다. 첫 번째는 세부 사항이 명확하지 않지만 다른 점은 동일한 점을 기반으로 너무 유용하여 유용하지 않습니다. 두 플롯 모두 spatstat R 패키지 의 density () 함수로 생성되었습니다 .

플롯에 더 많은 "흐름"을 줄 수있는 방법은 무엇입니까? 내가 목표로하는 것은 상용 SpatialKey ( 스크린 샷 ) 소프트웨어 의 결과가 더 많이 보이는 것 입니다.

이 방향으로 나를 데려 갈 수있는 힌트, 알고리즘, 패키지 또는 코드 줄이 있습니까?

여기에 이미지 설명을 입력하십시오


image () 함수를 보셨습니까? 나누기 횟수를 늘리면 해상도가 높아집니다.
매크로

답변:


28

플롯의 부드러움, 커널 밀도 추정에 사용 된 대역폭 및 플롯에서 색상을 지정하는 중단에 영향을주는 두 가지 사항이 있습니다.

경험상 탐색 적 분석을 위해 유용한 음모를 얻을 때까지 대역폭을 조정하기 만하면됩니다. 아래 데모.

library(spatstat)
set.seed(3)
X <- rpoispp(10)
par(mfrow = c(2,2))
plot(density(X, 1))
plot(density(X, 0.1))
plot(density(X, 0.05))
plot(density(X, 0.01))

여기에 이미지 설명을 입력하십시오

기본 색 구성표를 변경해도 아무런 도움이되지 않으며 픽셀의 해상도도 변경되지 않습니다 (기본 해상도가 너무 정밀한 경우 해상도를 낮추고 픽셀을 더 크게 만들어야합니다). 미적 목적으로 기본 색 구성표를 변경하고 싶을지라도, 그것은 매우 구별하기위한 것입니다.

색상이 스케일 수준을 로그로 변경하는 데 도움이되는 작업 ( 매우 불균일 한 프로세스 가있는 경우에만 도움이 됨 ) 하단에서 색상 팔레트를 더 많이 변경하도록 변경하십시오 (색상 램프 사양의 측면에서 바이어스) R) 또는 연속이 아닌 개별 빈을 갖도록 범례를 조정하십시오.

범례에서의 편견의 예는 여기 에서 수정 되었으며, GIS 사이트에 별도의 빈을 색칠하는 방법을 설명하는 또 다른 게시물이 있습니다 . 패턴이 처음부터 끝났거나 매끄러 워지면 도움이되지 않습니다.

Z <- density(X, 0.1)
logZ <- eval.im(log(Z))
bias_palette <- colorRampPalette(c("blue", "magenta", "red", "yellow", "white"), bias=2, space="Lab")
norm_palette <- colorRampPalette(c("white","red"))
par(mfrow = c(2,2))
plot(Z)
plot(logZ)
plot(Z, col=bias_palette(256))
plot(Z, col=norm_palette(5))

여기에 이미지 설명을 입력하십시오


마지막 이미지 (첫 번째 색상 빈이 흰색 인 경우)에서 색상을 투명하게 만들려면 색상 램프를 생성 한 다음 RGB 사양을 투명 색상으로 대체하면됩니다. 위와 동일한 데이터를 사용하는 아래 예

library(spatstat)
set.seed(3)
X <- rpoispp(10)
Z <- density(X, 0.1)
A <- rpoispp(100) #points other places than density


norm_palette <- colorRampPalette(c("white","red"))
pal_opaque <- norm_palette(5)
pal_trans <- norm_palette(5)
pal_trans[1] <- "#FFFFFF00" #was originally "#FFFFFF" 

par(mfrow = c(1,3))
plot(A, Main = "Opaque Density")
plot(Z, add=T, col = pal_opaque)
plot(A, Main = "Transparent Density")
plot(Z, add=T, col = pal_trans)


pal_trans2 <- paste(pal_opaque,"50",sep = "")
plot(A, Main = "All slightly transparent")
plot(Z, add=T, col = pal_trans2)

여기에 이미지 설명을 입력하십시오


매우 분명한 답변을 주셔서 감사합니다. 이것은 트릭을 수행하기 위해 정렬 한 "spatstat.options (npixel = c (100,100))"명령과 결합되었습니다. 좀 더 귀찮게한다면 : "배경"을 투명하게 만드는 방법을 알고 있습니까?
Figaro

1
@Figaro, 나는 색상을 반투명하게 만드는 예제로 업데이트했습니다.
Andy W

고맙습니다. 하나 더. 이 주제와 관련이 없을 수도 있습니다. 이러한 히트 맵을 Shape 파일로 내보내려면 어떻게해야합니까? 아니면 래스터로만 취급해야합니까?
Figaro

나는 그런 짓을 한 적이 없어서 손으로 말할 수 없습니다. 아마도 R 전문가가 스택 오버 플로우에 대해 좋은 질문 일 것입니다.
Andy W

히트 맵을 래스터 이외의 것으로 표시 할 수 있습니까?
Figaro

2

akima 패키지의 interp 기능을 활용할 수 있습니다. 필요한 경우 행렬을 다른 해상도로 보간 할 수 있습니다. 링크 된 예제와 같은 것을 만들기 위해서는 꽤 좋은 그리드로 보간해야합니다 (아마 xo와 yo의 길이가 ~ 1000 길이 인 경우). 이렇게하면 image ()로 플롯 할 수있는 새로운 행렬이 제공됩니다. 투명성을 원하면 추가 작업이 필요합니다. 색상 표를 사용하는 것은 쉽지 않으므로 각 그리드를 지정된 색상의 다각형으로 그려야 할 수도 있습니다.


투명도를 만든 경험이 있습니까? 예가 있습니까? 다음 단계가 될 것입니다.
Figaro

interp ()에 필요한 x, y, z 값을 어떻게 만듭니 까? 예를 들어, density ()가 100x100 그리드를 사용하는 경우 각 점에 z 값이 있지만 필요한 벡터 형식의 x & y는 없습니다 (축 좌표 만 있음).
Figaro

좌표 쌍을 얻기 위해 루프를 만들었지만이 기능이 있습니까?
Figaro

2
결국 이미지가 투명한 색상을 받아 들일 수있는 것 같습니다. menugget.blogspot.de/2012/04/…를 참조하십시오 . "- expand.grid (X = X, Y = y)에 그리드 <"당신은 여전히 보정시 사용하려는 경우, 당신은 당신의 XY가와 Z 레벨에 대한 조합 좌표 생성 할 수있다
마크 상자에

1

ggplot2를 살펴볼 수 있습니다. 시도한 패키지에 훌륭한 색 구성표 나 "흐름"이없는 것 같습니다. RColorBrewer를 살펴보십시오. 간단한 패키지로 이러한 패키지를 구현 한 블로그 가 있습니다.

링크 된 예에 표시된대로 지리적 데이터를 표시하려고하는지 확실하지 않지만 Google에서 "Static Maps API V2 개발자 안내서"를 제공하고 RgoogleMaps라는 패키지와 Google 및 R결합 할 수 있다는 것을 알고 있다면 .

당신의 연구에 행운을 빕니다.


불분명 한 경우 죄송하지만, 현재 문제는 색 구성표 자체가 아닙니다. 그러나 오늘 일찍 RColorBrewer를 사용해 보았습니다. 공간 데이터이므로 Google API를 사용하고 싶지는 않지만 모양이 있습니다.
Figaro

0

에서 해상도를 높이려고 했습니까 density? 논쟁 dimyx=c(512, 512)이상을 시도하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.