2015-01-22 8 views
0

R에 여러 래스터가 포함 된 다중 패널 플롯을 만들려고합니다. Windows 컴퓨터에서 작업하고 있습니다.R 래스터 레벨 플롯 (범주 범례 포함)

Raster로는 다음과 같은 형식으로 표시한다 :

첫 행 가시 "메인"타이틀과 함께 ylabel (중심) 단일 래스터를 포함한다.

행 2 - 6에는 두 개의 인접한 래스터 (즉, 두 개의 열)가 있습니다. "메인"제목은 2 행에서만 필요하며 나머지 제목 행은 표제가됩니다.

행 7에는 범례 범례가 포함되어야합니다. 이 질문에 대해 설명한 것과 마찬가지로 여기서 제공 :

https://gis.stackexchange.com/questions/73143/legend-of-a-raster-map-with-categorical-data

간격이 중요하다. 제목을 허용하기 위해 행 1과 행 2 사이에 약간의 여유 공간을 유지하면서 행 2와 행 8 사이의 거리를 최소화하고 싶습니다. 각 래스터는 같은 크기 여야합니다.

아래에서 제가 수행중인 작업의 재현 가능한 예를 찾으십시오. 나는 왜 "메인"제목에 색칠 된 배경이 만들어 지는지 확신 할 수 없으며 "top.padding"및 "bottom.padding"명령으로 공백을 줄이려고 시도한 후에 발생합니다.


library(raster) 

library(rasterVis) 

f <- system.file("external/test.grd", package="raster") 

r <- raster(f) 

rmat = as.matrix(r) 

pc = c(0,0.6,0.8,0.9,0.92,0.95,0.97,0.98,0.99,1) 

digits_n = c(0,1,c(rep(0,length(pc)-2))) 

color_breaks = NULL 

for (i in 1:length(pc)){color_breaks = c(color_breaks, signif(quantile(c(rmat[which(!is.na(rmat))]),pc[i]), digits = digits_n[i]))} 

color_breaks = unique(color_breaks) 

color_type = c(colorRampPalette(c("snow1","snow3","seagreen","orange","firebrick"))(length(color_breaks))) 

ss = stack(r) 

p0 = levelplot(ss, col.regions=color_type, colorkey=FALSE,margin=FALSE, at=color_breaks,names.attr=c(2000), xlab=NULL, ylab=c("A0"), scales=list(draw=FALSE), par.settings=list(layout.heights=list(bottom.padding=-2))) 

ss = stack(r,r) 

p1 = levelplot(ss,col.regions=color_type, colorkey=FALSE, margin=FALSE, at=color_breaks, names.attr=c(2050,2100), xlab=NULL, ylab=c("A1"), scales=list(draw=FALSE), layout=c(2,1), par.settings=list(layout.heights=list(top.padding=-2,bottom.padding=-2))) 

ss = stack(r,r) 

p2 = levelplot(ss,col.regions=color_type, colorkey=FALSE, margin=FALSE, at=color_breaks, names.attr=c("",""), xlab=NULL, ylab=c("A2"), scales=list(draw=FALSE), layout=c(2,1), par.settings=list(layout.heights=list(top.padding=-2,bottom.padding=-2))) 

ss = stack(r,r) 

p3 = levelplot(ss,col.regions=color_type, colorkey=FALSE, margin=FALSE, at=color_breaks, names.attr=c("",""), xlab=NULL, ylab=c("A3"), scales=list(draw=FALSE), layout=c(2,1), par.settings=list(layout.heights=list(top.padding=-2,bottom.padding=-2))) 

ss = stack(r,r) 

p4 = levelplot(ss,col.regions=color_type, colorkey=FALSE, margin=FALSE, at=color_breaks, names.attr=c("",""), xlab=NULL, ylab=c("A4"), scales=list(draw=FALSE), layout=c(2,1), par.settings=list(layout.heights=list(top.padding=-2,bottom.padding=-2))) 

ss = stack(r,r) 

p5 = levelplot(ss,col.regions=color_type, colorkey=FALSE, margin=FALSE, at=color_breaks, names.attr=c("",""), xlab=NULL, ylab=c("A5"), scales=list(draw=FALSE), layout=c(2,1), par.settings=list(layout.heights=list(top.padding=-2,bottom.padding=-2))) 

windows() 

print(p0, split= c(1,1,1,7), between = c(3,3)) 

print(p1, split= c(1,2,1,7), newpage=FALSE) 

print(p2, split= c(1,3,1,7), newpage=FALSE) 

print(p3, split= c(1,4,1,7), newpage=FALSE) 

print(p4, split= c(1,5,1,7), newpage=FALSE) 

print(p5, split= c(1,6,1,7), newpage=FALSE) 

그때 뭔가 다음과 비슷한 행 7 범례에 추가 할

:

legend("center", 
    ncol = length(color_breaks)/2, 
    legend=c(color_breaks), 
    fill=color_type,cex=0.6, 
    title=expression(bold("Magnitude [ UNITS ]")), box.col = FALSE, xjust = 0, title.adj = 0 
    ) 

내가 얻을 이미지를 게시 할 것입니다하지만 난 것 같아요 평판 포인트가 필요합니다.

제목의 배경색이 나타나는 이유는 무엇입니까? 행 1과 행 2 사이의 공간을 늘리면서 행 2와 행 6 사이의 간격을 줄이려면 어떻게해야합니까? 이제 7 번 열에 범주 형 범례를 추가하는 방법은 무엇입니까?

감사합니다.

답변

1

간략 귀하의 질문에 대답하려고합니다

  1. 스트립 지역의 배경색은 lattice의 기본 값입니다. rasterTheme은 흰색으로 설정하지만 col.regions 대신 par.settings을 사용해야합니다 (here).
  2. panel.widthpanel.height 개의 인수를 print.trellis으로 시도해야합니다.
  3. levelplot은 적절한 범례가있는 범주 형 래스터를 플롯 할 수 있지만 이에 따라 래스터를 정의해야합니다. Here 예를 찾을 수 있습니다.
+0

감사합니다. 7 번째 줄에 범례 범례를 추가하는 방법은 아직 명확하지 않습니다. 나는 범례 범례 (내 게시물에는 스크립트가 포함되어 있음)를 만드는 방법을 알고 있지만 레벨 플롯 창에서 배치를 제어하는 ​​방법은 알지 못합니다. 내 현재의 해결 방법은 별도의 창에서 음모를 꾸미고 나서 R (두통의 비트) 외부의 플롯에 추가하는 것입니다. – scp390