【问题标题】:create hexagonal cells grid using lat/lon coordinates使用纬度/经度坐标创建六边形单元格
【发布时间】:2014-09-10 10:37:45
【问题描述】:

我想使用 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)

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

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

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

【问题讨论】:

    标签: r spatial r-grid


    【解决方案1】:

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

    至于第二个问题,我不确定,但由于所有六边形的大小相同,并且需要相同的操作才能居中,因此您可以通过适当地更改 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)
    )
    

    您可以稍后选择是使用count 还是density 来获取颜色,但警告:这些与您的z 变量不同,这些变量提供给ggplot2。如果您想根据其他一些统计数据进行总结,那么我建议您也研究一下这些函数的内容,以了解事物是如何传递的。这就是我一直在做的。

    【讨论】:

    • 非常感谢,这就是我要找的。但我想知道如何将六角单元格放入数据框(即获得与“df”相同的数据框,但使用六角形单元格的坐标)。我无法处理对其他文件(如栅格、数据框...等)进行分析所以,基本上,我怎样才能从“stat_summary_hex(fun=function(x)sum(x))”中检索数据框?
    • 正如我之前所说的(但同时与 tim riffe!),我想将我的六边形单元格作为经典数据框处理。有没有人对此有解决方案?
    • 比如,你想要每个十六进制单元格六个角坐标的df?
    • 例如,但我认为通过使用中心的纬度/经度来获得六边形单元格坐标的更合适的方法...?!
    • @Remssssss 请参阅编辑以回答。在代码中进行了一些深入挖掘,但找到了它。最终答案在:?hexbin:::hcell2xy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多