Неожиданное поведение с базовым plot.sf vs ggplot для sf-объектов - PullRequest
0 голосов
/ 16 июня 2020

Фон

Я испытываю необычное поведение при построении объекта класса sf с использованием базовых методов построения R для 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)

Функция gh_covering из geohashTools должна создать сетку, которая полностью охватывает экстент всех точек в meuse_sf.

Это сюжет из базовых сюжетов. Обратите внимание: похоже, что некоторые точки находятся за пределами этой сетки.

plot(meuse_sf[1])
plot(meuse_gh[2], add = TRUE)

enter image description here

Сначала это казалось ошибкой в ​​gh_covering, но при воспроизведении в ggplot2 становится ясно, что это работает, как задумано

library(ggplot2)
ggplot() +
  geom_sf(data = meuse_sf, aes(colour = cadmium)) +
  geom_sf(data = meuse_gh, fill = NA)

enter image description here

Проверяет

Дополнительные проверки размеров ограничивающего прямоугольника и эквивалентности 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   

1 Ответ

1 голос
/ 16 июня 2020

В вашей первой команде построения графика вам нужно использовать

plot(meuse_sf[1], reset = FALSE)

, если вы хотите добавить элементы позже.

...