【发布时间】:2020-06-16 05:36:50
【问题描述】:
背景
我在使用 R 的 sf 对象的基本绘图方法绘制 sf 类对象时遇到了一些异常行为,与 ggplot2 的输出相比,该行为更加异常。
绘图旨在显示POLYGON 特征集合在POINT 特征集合之上的叠加。它们具有一致的 CRS 设置,并且多边形特征的边界框范围完全包围了点集合的边界框。
可重现的例子:
library(sf)
library(geohashTools)
data(meuse, package = "sp")
meuse_sf = st_as_sf(meuse, coords = c("x", "y"), crs = 28992, agr = "constant")
meuse_sf <- st_transform(meuse_sf, crs = st_crs(4326))
meuse_gh <- geohashTools::gh_covering(meuse_sf)
来自geohashTools 的gh_covering 函数应该创建一个完全包围meuse_sf 中所有点范围的网格。
这是来自基本地块的地块。请注意,看起来有些点在此网格之外。
plot(meuse_sf[1])
plot(meuse_gh[2], add = TRUE)
起初,这似乎是 gh_covering 中的一个错误,但当在 ggplot2 中重现时,很明显它正在按预期工作
library(ggplot2)
ggplot() +
geom_sf(data = meuse_sf, aes(colour = cadmium)) +
geom_sf(data = meuse_gh, fill = NA)
检查
对边界框范围和 CRS 等效性的额外检查恢复正常。
> st_bbox(meuse_sf)
xmin ymin xmax ymax
5.72319 50.95661 5.76304 50.99156
> st_bbox(meuse_gh)
xmin ymin xmax ymax
5.712891 50.954590 5.767822 50.998535
和
> st_crs(meuse_gh)==st_crs(meuse_sf)
[1] TRUE
问题
那么,是什么导致了基图行为的问题?
会话信息
> sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Mojave 10.14.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggplot2_3.3.0 sf_0.9-3 geohashTools_0.3.0 sp_1.4-1
【问题讨论】: