2012-06-22 121 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)