2012-08-09 83 views
1

我想繪製填充輪廓中的一些經緯度數據,然後在頂部覆蓋地球的地圖。我想是這樣的:如何在R語言中覆蓋填充輪廓上的全局地圖

filled.contour(lons, lats, glb.data, 
plot.axes={axis(1);axis(2);map(projection='rectangular',parameters=0,add=T)} 
) 

輪廓繪製的罰款,並在地圖上顯示出來,但只作爲等值線圖的面積小的非常微小的黑色矩形。當然,我想讓地圖在整個填充輪廓圖的整個區域上展開。

我也試過類似:

filled.contour(lons, lats, glb.data, 
plot.axes={axis(1);axis(2);map(projection='rectangular',x=lons,y=lats,parameters=0,add=T)} 
) 

在這種情況下,地圖完全不情節,我得到一個錯誤信息「沒有得出:所有地區越界」 人顯然一直都能成功地做到這一點,但是我一直無法實現它。誰能告訴我我做錯了什麼?順便說一句,我不想​​使用格子包。它不會與我的團隊正在做的其他事情一起工作。謝謝。

+0

爲了他人的利益,這裏回答了這裏:https://stat.ethz.ch/pipermail/r-help/2012-August/321207.html – mdsumner 2012-08-10 01:44:06

+0

對不起,但這個答案給了我一個不同但相似的問題。該地圖仍然不適合填充輪廓區域。 – 2012-08-10 15:32:00

+0

這是因爲你選擇了不同的投影映射,與你的數據不同 – mdsumner 2012-08-11 22:19:44

回答

2

好的。對於那些關心的人,我有一個答案。也許不是最好的答案,而是一個答案。問題是有兩種常見的方式來表示經度和緯度:度和弧度。有第三種常用的表示經度的方法:本地時間,即時間區域時間,一般化爲浮點數。然後,爲了使生活更有趣,以度爲單位的經度通常爲-180(東)至180(西)或0至360.

現在,當您嘗試顯示地圖時,R自動選取緯度基於地圖軟件包內部的顯示器。如果你在一套單位工作,但R想要在另一套單位顯示地圖,你會遇到麻煩。另一個缺點是不同的地圖投影想要以不同的單位顯示。正如我所發現的,「默認」投影喜歡度數;它想顯示在一個繪圖矩形中,經度的範圍爲-180至180,緯度的範圍爲-90至90。但是,「矩形」投影雖然看起來非常像默認投影,卻喜歡弧度;它想顯示在一個矩形中,伸展到pi(經度)和-pi/2到pi/2(緯度)。 這些繪圖限制在?mapproject中完全沒有討論過。

因此,這裏是你需要做什麼: 1)確定所需的地圖投影,然後確定在什麼限制它畫在:

> map(projection=foo,parameters=foo) 
> par('usr') # will return vector of plot limits 

2)瞭解自己的數據中所表示的單位如果你剛剛抓住別人的數據集,你可能會感到驚訝。

3)當你繪製...

filled.contour(lons, lats, glb.data) 

,如果你的「離子吸附」和「拉特」是在單位與投影期待,那麼你應該確定,你應該能夠限制保持一致只需添加一個地圖

filled.contour(lons, lats, glb.data, 
plot.axes={axis(1,...);axis(2,...);map(projection=foo,parameters=foo,add=T)}) 

但是如果你的離子吸附和背闊肌是什麼投影需求,那麼你有一點點更多的工作要做。您必須通過調用par()來重新定義劇情的極限。這是爲我工作:

filled.contour(lons, lats, glb.data, 
plot.axes={axis(1,...);axis(2,...);par(usr=c(-180,180,-90,90)); 
map(add=T)}) 

當我需要的本初子午線在情節的左端(I,E,東經處處從0到360 x軸上增加)我做了兩次調用par()和map():

filled.contour(lons, lats, glb.data, 
plot.axes={axis(1,...);axis(2,...); 
par(usr=c(0,360,-90,90));map(add=T); #eastern hemisphere 
par(usr=c(-360,0,-90,90));map(add=T)} #western 
) 

還有一些其他的皺紋。 (例如,'矩形'投影不具有的限制,而恰恰是-pi an + pi)。但是如果我迄今爲止所說的話是有道理的,那麼您將能夠處理它們。

1

爲什麼不只是使用image

image(lons, lats, glb.data) 
library(maps) 
map(add = TRUE) 

你從哪裏得到的想法,嘗試把map()plot.axes說法?

+0

我對圖像不太熟悉,但據我瞭解,它沒有給出顏色條。它不插值,所以顏色看起來很「塊狀」。我嘗試了這一點,並得到了一個不同的但相關的問題:地圖出現,但跑到窗口的邊緣。不過,這讓我想到了。我可以通過擺弄par(usr)來獲得我想要的近似值。必須有更好的方法,但是我調整好之後就行得通了。我明白了,因爲AFAICT,「plot.axes」是將水平線或座標線添加到填充輪廓的常用方法。我想一張地圖也可以工作。謝謝。 – 2012-08-09 22:43:56

+0

它使用useRaster = TRUE進行插值,filled.contour設置自己的座標系覆蓋基礎座標系,這就是爲什麼地圖偏移,使用Duncan Murdoch的答案,或者使用sp :: spplot或者raster軟件包 – mdsumner 2012-08-10 01:45:08