5

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

我想在 R 中绘制这些点,以便整个网格单元填充一些从z.

结果将类似于以下图像之一: 经纬度网格单元格填充

投影本身(例如兰伯特保角圆锥,等角)并不重要,只是网格单元格绘图。

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

我希望是一个类似于

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

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

有什么想法吗?

谢谢!

4

4 回答 4

7

使用spplot或的替代方法image是使用ggplot2. 相关的几何形状是geom_rastergeom_tile。第一个应该性能更好并产生更小的文件,第二个更标准。以下示例调用:

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

源自我的这篇博文。此外,还支持通过封装ggplot2进行一系列投影,详情请参阅。mapprojcoord_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)
于 2012-06-23T11:03:43.740 回答
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()<-一步失败,那么很可能你的xandy值实际上并没有提供一个规则的网格,这是你的图所暗示的。如果它们确实是网格化的经度/纬度值,并且您需要将它们投影到图像中的值,那么请查看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 字符串,您可以在sp或中使用它raster

于 2012-06-22T22:43:06.333 回答
2

我最近尝试做那种地图,最后在绘图之前使用interpakima的功能将我的 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)
于 2012-06-23T07:02:00.857 回答
0

你可以这样做:

library(raster)
r <- rasterFromXYZ(xyz)
plot(r)
于 2015-10-15T03:32:07.637 回答