R在地图上绘制填充的经度 - 纬度网格单元格

时间:2012-06-22 22:30:19

标签: r plot ggplot2 geospatial

我的数据框包含多个(x,y,z)个数据点,(x,y)是大小为w的经度 - 纬度单元格的右下角坐标(例如1度)格)。 z值已在此单元格上取平均值。

我想在R中绘制这些点,以便整个网格单元格中填充一些从z派生的颜色。

结果看起来像这些图像之一: longitude-latitude grid cells filled

投影本身(例如Lambert conformal conic,equirectangular)并不重要,只是网格单元绘图。

我的数据很稀疏:并非每个经度 - 纬度单元都有与之关联的数据。

我的希望是类似于

的解决方案
library(maps)
map("state")
grid_points(my_data,c("x","y","z"),0.5)

其中0.5是上面的网格分辨率,表示0.5度单元格。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:7)

使用spplotimage的替代方法是使用ggplot2。相关的几何图形为geom_rastergeom_tile。第一个应该表现更好,产生更小的文件,第二个更标准。以下示例调用:

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

来自我的this blogpost。此外,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)

答案 1 :(得分: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或您下载的源代码以及您用来将其读入R的代码。

如果上述代码在gridded()<-步骤失败,那么您的xy值可能实际上不会提供常规网格,这是您的图表所暗示的。如果它们确实是网格化的经度/纬度值,并且您需要将它们投影到图像中的那些,那么请查看raster包,或者更常见的rgdal包。

library(raster)
?projectRaster

library(rgdal)
?project
?spTransform

(这些情节在我看来像是北美的“Albers Equal Area和Lambert Conformal Conic Projections”之一,如本网站所示:http://www.colorado.edu/geography/gcraft/notes/mapproj/mapproj_f.html)。

请参阅http://spatialreference.org以获取投影的PROJ.4字符串,您可以在spraster中使用该字符串。

答案 2 :(得分:2)

我最近尝试做那种地图,最后使用库interp的函数akima将我的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)

答案 3 :(得分:0)

你可以这样做:

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