2015-02-05 15 views
1

我想繪製2個柵格,其中具有相同比例的不同值並進行比較。我一直試圖用thisthis來解決答案。使用科學計數法爲圖表下方的2個柵格生成常見圖例(比例)

我遇到了兩個問題:

  1. 我希望能夠在科學記數法的圖例標籤(有太多的小數位而沒有任何用途的)
  2. 我想這兩個地塊的底部都有一個比例尺。

我熟悉使用legend(),但不知道如何設置標尺的位置/方向和使用圖的科學記數法。 我已經產生了一些樣本數據顯示我遇到了這個問題:

library(raster) 
set.seed(10) 
x = runif(2000000, -0.0005, .9875) 
y = runif(2000000, -0.0008, .99) 
xmat = matrix(x, nrow = 500) 
ymat = matrix(x, nrow = 500) 
xras = raster(xmat) 
yras = raster(ymat) 
min_ = min(minValue(xras), minValue(yras)) 
max_ = max(maxValue(xras), maxValue(yras)) 

繪製數據我使用:

par(mfrow = c(2,1)) 
plot(xras, col=rev(rainbow(99, start=0,end=1)), breaks=seq(min_,max_,length.out=100), legend = FALSE, axes = FALSE) 
plot(yras, col=rev(rainbow(99, start=0,end=1)), breaks=seq(min_,max_,length.out=100), legend = FALSE, axes = FALSE) 
r.range = c(min_, max_) 

,並生成我使用的傳說:

plot(xras, legend.only=TRUE, col=rev(rainbow(99, start=0,end=1)), legend.width=1, legend.shrink=0.75, axis.args=list(at=seq(r.range[1], r.range[2], abs(r.range[1]-r.range[2])/4), labels=seq(r.range[1], r.range[2], abs(r.range[1]-r.range[2])/4), cex.axis=0.6), legend.args=list(text='Precipitation (m)', side=1, font=2, line=2.5, cex=0.8)) 

我打開任何方法/包來解決這個問題。我已經看到image()是繪製柵格的流行解決方案,但寧願能夠保持與柵格關聯的投影。

重申我所希望的:使用科學記數法顯示兩個柵格圖(具有不同但相似的值(請參見示例)),並顯示下面的常見圖例。

+0

你可以嘗試一下'rasterVis'包。 –

+0

謝謝@Pascal,我一直在看rasterVis。試圖弄清楚如何在一個繪圖上繪製兩個柵格(par(mfrow = c(2,1))似乎被覆蓋,並且不確定如何刪除附加的繪圖。 – Sarah

回答

1

這是一個嘗試。這將需要更多的細化:

library(rasterVis) 
set.seed(10) 
x = runif(2000000, -0.0005, .9875) 
y = runif(2000000, -0.0008, .99) 
xmat = matrix(x, nrow = 500) 
ymat = matrix(x, nrow = 500) 
xras = raster(xmat) 
yras = raster(ymat) 
min_ = min(minValue(xras), minValue(yras)) 
max_ = max(maxValue(xras), maxValue(yras)) 
r.range = c(min_, max_) 

levelplot(stack(xras, yras), col.regions = rev(rainbow(99, start=0, end=1)), colorkey = list(space = "bottom")) 

enter image description here

+1

這工作 - 柵格自動堆疊在彼此的頂部(我沒有想到) - 因爲他們是地球儀(長度更長,高度更高)。謝謝! – Sarah

1

雖然@Pascal能夠回答這個問題,我發現我有更多的靈活性,工作了我原來的嘗試。雖然我說科學記數法,我是不正確的,只是想截斷小數位,這是通過添加round功能完成的:

axis.args=list(at=seq(r.range[1], r.range[2], abs(r.range[1]-r.range[2])/4),      labels=round(seq(r.range[1], r.range[2], abs(r.range[1]-.range[2])/4),2), cex.axis=1), 

我能夠把傳說下方(並修改了內部和外部邊緣) ,並使用legend.shrink,legend.widthlegend.args調整它上的設置。最後,該腳本是:

library(raster) 

set.seed(10) 
x = runif(2000000, -0.0005, .9875) 
y = runif(2000000, -0.0008, .99) 
xmat = matrix(x, nrow = 500) 
ymat = matrix(x, nrow = 500) 
xras = raster(xmat) 
yras = raster(ymat) 
min_ = min(minValue(xras), minValue(yras)) 
max_ = max(maxValue(xras), maxValue(yras)) 
op <- par(mfrow = c(2,1), 
    oma = c(2,4,0,0) + 0.1, 
    mar = c(5,0,1,1) + 0.1) 
plot(xras, col=rev(rainbow(99, start=0,end=1)), breaks=seq(min_,max_,length.out=100), legend = FALSE, axes = FALSE) 
plot(yras, col=rev(rainbow(99, start=0,end=1)), breaks=seq(min_,max_,length.out=100), legend = FALSE, axes = FALSE) 
r.range = c(min_, max_) 
plot(xras, col=rev(rainbow(99, start=0,end=1)), horizontal=TRUE, `breaks=seq(min_,max_,length.out=100), legend.only=TRUE, legend.shrink = 1, legend.width = 3, axis.args = list(at=seq(r.range[1], r.range[2], abs(r.range[1]-r.range[2])/4), labels = round(seq(r.range[1], r.range[2], abs(r.range[1]-r.range[2])/4),2),cex.axis=1), legend.args= list(text='Precipitation (XXX)', side=1, font=3, line = 2, cex=1))` 

,看起來像這樣與樣本數據: enter image description here

這與我的真實數據(我在plot()命令改爲axes = TRUE): enter image description here