r - 使用纬度/经度坐标创建六边形单元格

标签 r spatial r-grid

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

但是这样做并没有提供我想要的。

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

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

最佳答案

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

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

[[编辑 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调用的key函数,并且您可能需要明确指定参数 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 .如果您想根据其他一些统计数据进行总结,那么我建议您也研究一下这些函数的内部结构,看看事情是如何传递的。这就是我一直在做的。

关于r - 使用纬度/经度坐标创建六边形单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839423/

相关文章:

最近点的 MySQL 空间连接

r - 如何在多行/列上绘制对齐的文本?

r - 单击 "Run the current line or selection"时停止执行

r - 将 stat_compare_means 与 r : calculates p value only for 1 facet 中的构面结合起来

R:计算两个顶点之间的单条最短路径

sql-server - 为什么我的缓冲点在 SQL Server Management Studio 中是椭圆形而不是圆形 - 空间结果

r - 在同一页面上排列基本图和 grid.tables

r - 并排绘制 gList

r - 嵌套应用函数

r 当 root 相似时停止猜测名称