在ggplot2中使用hexes绘制栅格

时间:2014-12-30 18:18:34

标签: r ggplot2 gis

我有一个GIS栅格数据框,我想用六角形图块绘制。使用tile_geom()的标准方法很简单:

ggplot(raster_df, aes(x, y, fill=blabla)) + geom_tile()

然而,我真的希望我的光栅点显示为六角形,而不是因为美学原因而显示。最终结果应该类似于这篇博文:http://www.statsblogs.com/2014/09/02/how-to-create-a-hexagonal-bin-plot-in-sas/

我尝试使用geom_hex()而不是geom_tile(),但由于geom_hex()似乎是考虑到binning,我无法弄清楚如何破解它来显示我的数据。我希望每个光栅点对应一个十六进制,即根本没有binning!

感谢您的任何建议。

编辑:根据要求,这是一个示例数据栅格(它实际上非常接近我正在使用的栅格,因为我想根据自定义统计信息绘制世界地图并为每个栅格点着色)

library(maptools)
library(raster)
library(ggplot2)

data('wrld_simpl')
raster_df <- as.data.frame(rasterToPoints(rasterize(wrld_simpl, raster(res=5))))
raster_df$blabla <- rnorm(nrow(raster_df))

1 个答案:

答案 0 :(得分:1)

看起来好像这可能是由于geom_hexggplot2的实施所致。我已经使用了这个包几年了,我的第一个猜测是尝试:

ggplot(raster_df, aes(x, y, fill=blabla)) + geom_hex(stat="identity")

但这会引发错误:

Error in ggplot2:::hexGrob(x = raster_df$x, y = raster_df$y, fill = raster_df$blabla) : 
could not find function "hexcoords"

所以我查找了hexcoords包中显示的函数hexbin。我明确加载该包并再试一次:

library(hexbin)
ggplot(raster_df, aes(x, y, fill=blabla)) + geom_hex(stat="identity")

这很有效。结果不是特别漂亮,所以最好直接使用hexbin包。

似乎没有geom_hex()设计为直接将数据绘制为六边形而没有stat = "binhex"的临时步骤,这与许多其他geom_函数不同。