簡體   English   中英

帶有類別圖例的多圖窗口中的柵格水平圖

[英]R raster levelplot in multiplot window w/ categorical legend

我正在嘗試在R中制作一個包含多個不同柵格的多面板圖。 我正在Windows機器上工作。

柵格將以以下格式顯示:

第一行應包含一個柵格(居中),並帶有可見的“主”標題和ylabel。

第2至6行包含兩個相鄰的柵格(即,兩列)。 僅在第2行上需要“主要”標題,因為標題適用於其余行。

第7行應包含分類圖例。 與此處提供的答案中所述的內容類似:

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

間距很重要。 我想最小化第2行和第8行之間的距離,同時保留第1行和第2行之間的一些額外空間以保留標題。 每個柵格的大小應相同。

請在下面找到我正在處理的可復制示例。 我不確定為什么會產生“主要”標題的彩色背景,並且是在嘗試使用“ 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. 條形區域的背景色是lattice的默認值。 rasterTheme其設置為白色,但你必須使用par.settings代替col.regions描述這里
  2. 你應該嘗試的panel.widthpanel.height的參數print.trellis
  3. levelplot能夠繪制具有適當圖例的分類柵格,但是您必須相應地定義柵格。 在這里,您將找到一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM