我的数据框包含多个(x,y,z)
个数据点,(x,y)
是大小为w
的经度 - 纬度单元格的右下角坐标(例如1度)格)。 z
值已在此单元格上取平均值。
我想在R中绘制这些点,以便整个网格单元格中填充一些从z
派生的颜色。
结果看起来像这些图像之一:
投影本身(例如Lambert conformal conic,equirectangular)并不重要,只是网格单元绘图。
我的数据很稀疏:并非每个经度 - 纬度单元都有与之关联的数据。
我的希望是类似于
的解决方案library(maps)
map("state")
grid_points(my_data,c("x","y","z"),0.5)
其中0.5是上面的网格分辨率,表示0.5度单元格。
有什么想法吗?
谢谢!
答案 0 :(得分:7)
使用spplot
或image
的替代方法是使用ggplot2
。相关的几何图形为geom_raster
和geom_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()<-
步骤失败,那么您的x
和y
值可能实际上不会提供常规网格,这是您的图表所暗示的。如果它们确实是网格化的经度/纬度值,并且您需要将它们投影到图像中的那些,那么请查看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字符串,您可以在sp
或raster
中使用该字符串。
答案 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)