0

多数の異なるラスターを含むマルチパネル プロットを R で作成しようとしています。私はWindowsマシンで作業しています。

ラスターは次の形式で表示されます。

最初の行には、「メイン」タイトルと ylabel が表示された単一のラスター (中央揃え) が含まれている必要があります。

行 2 ~ 6 には、隣接する 2 つのラスター (つまり、2 つの列) が含まれます。見出しは残りの行に保持されるため、「メイン」タイトルは行 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 にカテゴリの凡例を追加するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

1

私はあなたの質問に簡単に答えようとします:

  1. ストリップ リージョンの背景色は、 のデフォルト値ですlattice。はrasterTheme白に設定しますが、ここで説明するpar.settings代わりに使用する必要があります。col.regions
  2. panel.widthのとのpanel.height引数を試す必要がありますprint.trellis
  3. levelplotは、適切な凡例を使用してカテゴリ ラスターをプロットできますが、それに応じてラスターを定義する必要があります。ここに例があります。
于 2015-01-24T15:55:18.780 に答える