好的。對於那些關心的人,我有一個答案。也許不是最好的答案,而是一個答案。問題是有兩種常見的方式來表示經度和緯度:度和弧度。有第三種常用的表示經度的方法:本地時間,即時間區域時間,一般化爲浮點數。然後,爲了使生活更有趣,以度爲單位的經度通常爲-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)。但是如果我迄今爲止所說的話是有道理的,那麼您將能夠處理它們。
爲了他人的利益,這裏回答了這裏:https://stat.ethz.ch/pipermail/r-help/2012-August/321207.html – mdsumner 2012-08-10 01:44:06
對不起,但這個答案給了我一個不同但相似的問題。該地圖仍然不適合填充輪廓區域。 – 2012-08-10 15:32:00
這是因爲你選擇了不同的投影映射,與你的數據不同 – mdsumner 2012-08-11 22:19:44