2012-06-22 118 views
5

我有一個數據框,其中包含多個(x,y,z)數據點,(x,y)是大小爲w(例如1度網格)的經度 - 緯度單元格的右下座標, 。該單元格的平均值爲zR地圖在地圖上填充的經度 - 緯度網格單元格

我想繪製R中的這些點,以便整個網格單元格填充一些來自z的顏色。

結果會看起來像這些圖像中的一個: longitude-latitude grid cells filled

投影本身(如蘭伯特等角圓錐,等距離長方圓柱)並不重要,只是網格單元繪圖。

我的數據很稀疏:不是每個經緯度單元格都會有與之相關的數據。

我希望將類似於

library(maps) 
map("state") 
grid_points(my_data,c("x","y","z"),0.5) 

一個解決方案,其中0.5是上面的網格分辨率,表示0.5度細胞。

有什麼想法?

謝謝!

+1

我的榮幸,@PaulHiemstra 。你的答案是關於尋找什麼的,我只是想把它們合併在一起。非常感謝你的幫助。 – Richard

回答

6

使用任一spplotimage一種替代方法是使用ggplot2。相關的幾何圖形是geom_rastergeom_tile。第一個應該表現更好,產生的文件更小,第二個更標準。下面的例子調用:從我的this blogpost

ggplot(aes(x = x, y = y, fill = value), data = dat_grid) + geom_tile() + 
    geom_path(data = ant_ggplot) 

orginates。此外,ggplot2支持通過mapproj包的一系列預測,請參閱coord_map瞭解更多詳情。

下面是一個工作示例(前提是你已經定義YOUR_DATA有X,Y,Z列):

library(ggplot2) 
library(maps) 
us_states <- map_data("state") 
(ggplot(aes(x=x,y=y,fill=z),data=YOUR_DATA) + geom_tile())+geom_polygon(data=us_states,aes(x=long, y=lat, group=group), colour="black", fill="white", alpha=0) 
3

如果data.frame爲「x」,試試這個:

library(sp) 
coordinates(x) <- c("x", "y", "z") 
gridded(x) <- TRUE 
image(x, col = terrain.colors(256), useRaster = TRUE) 

爲了得到一個非常確切的答案,你應該提供數據的樣本,希望整個data.frame或源在那裏你下載並且使用如果上面的代碼在gridded()<-一步失敗讀取到R.

的代碼,那麼很可能你的xy值實際上並不提供正規的網格,這是由你的曲線暗示。如果它們確實是網格經度/緯度值,並且您需要將它們投影到圖像中,請參閱raster程序包或更一般的rgdal程序包。

library(raster) 
?projectRaster 

library(rgdal) 
?project 
?spTransform 

(這些曲線看起來對我來說,如本網站上的「北美的阿爾伯斯等積等角圓錐投影」之一:http://www.colorado.edu/geography/gcraft/notes/mapproj/mapproj_f.html)。

請參閱http://spatialreference.org以獲得投影的PROJ.4字符串,您可以在spraster中使用該字符串。

+0

投影本身並不重要,只是網格單元格繪圖。我將編輯這個問題來反映這一點。 – Richard

+0

我的答案仍然相關。它也適用於稀疏座標,只要它們是規則的。在不知道投影或任何有關您的數據的情況下,我們只能猜測,投影是非常重要的,直到您向我們提供足夠的細節,才能知道您真正擁有的和真正想要的那些網格線。 – mdsumner

2

我想這樣做的地圖種類近日,結束了利用圖書館akima的功能interp繪製之前intrapolate我的小Z的數據爲常規電網(任何一種推算將具備使用interp之前做) :

library(akima) 
interp(x,y,z,xo=seq(min(x),max(x),by=0.5),yo=seq(min(y),max(y),by=0.5),extrap=FALSE,linear=TRUE) -> xygrid 
image(xygrid,breaks=seq(min(z),max(z),length=10), col=1:10) 
0

你可以這樣做:

library(raster) 
r <- rasterFromXYZ(xyz) 
plot(r)