使用lat / lon坐标创建六边形单元网格

时间:2014-07-19 10:36:51

标签: r spatial r-grid

我想使用WGS84坐标创建一个六边形单元格的空间网格(即由2个坐标X =纬度和Y =经度定义的单元格)

所以,这就是我的想法:

library(ggplot2);library(hexbin)
X<-seq(-10,20,by=0.1) # create coordinates vectors X and Y
Y<-seq(35,65,by=0.1)
z<-rnorm(301,0.5,1)
df<-as.data.frame(cbind(X,Y,z)) # create data frame with a z value for each cells (X,Y)
pl<-ggplot2(data=mat,aes(x=X,y=Y,z=z))+stat_summury_hex(fun=function(x) sum(x))
plot(pl)

但这样做并不能提供我想要的东西。

所以,我的问题是:如何使用lat / lon坐标做六边形单元格的空间网格?

第二个问题:如何创建一个以一个点为中心的网格(代表质心,而不是像往常一样代表左下角?)

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您正在寻找expand.grid()

xy <- expand.grid(X=X,Y=Y)
z<-rnorm(nrow(xy),0.5,1)
df<-as.data.frame(cbind(xy,z)) # create data frame with a z value for each cells (X,Y)
head(df)
pl<-ggplot(data=df,aes(x=X,y=Y,z=z))+stat_summary_hex(fun=function(x) sum(x))
plot(pl)

enter image description here

关于第二个问题,我不确定,但由于所有六边形大小相同并且需要相同的操作才能居中,因此您可以通过更改XY来统一转换它们适当。也许这也可以通过参数来完成,不确定。

[[编辑7月23日]] 第二个问题是如何获得data.frame十六进制坐标。进行了一些挖掘,但这是一个例子:

library(hexbin)
coords <- hcell2xy( hexbin(x=X,y=Y))
head(coords)
      x        y
1 -10.0 35.00000
2  -9.5 35.86603
3  -8.5 35.86603
4  -9.0 36.73205
5  -8.0 36.73205
6  -7.5 37.59808

hcell2xy()是由ggplot2调用的关键函数,您可能需要明确指定参数xbins,该参数在ggplot2内自动确定,但出现在两种情况下默认为30。

[[编辑3,包括z级别]] 这也是要求z水平的评论的答案。从ggplot2:::hexBin

中删除
hb <- hexbin(x=X,y=Y)
# Convert to data frame
data.frame(
        hcell2xy(hb), 
        count = hb@count, 
        density = hb@count / sum(hb@count, na.rm=TRUE)
)

您可以选择稍后使用countdensity作为颜色,但警告:这些与您z变量的ggplot2变量不同。如果您想根据其他统计数据进行总结,那么我建议您也查看这些函数的内容,看看事情是如何传递的。这就是我一直在做的事情。