4

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

所以,这就是我的想法:

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)

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

所以,我的问题是:如何使用纬度/经度坐标使用六边形单元格制作空间网格?

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

4

1 回答 1

3

如果我理解正确,您正在寻找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)

在此处输入图像描述

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

[[Edit July 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。如果您想根据其他一些统计数据进行总结,那么我建议您也研究一下这些函数的内容,以了解事物是如何传递的。这就是我一直在做的。

于 2014-07-19T22:15:09.843 回答