Построение точек и мультиполигональных объектов в R с sf - PullRequest
0 голосов
/ 24 мая 2018

Я пытался построить объекты points и multipolygon sf, но безуспешно.Ниже приводится воспроизводимый пример моей проблемы.

library(sf)
library(magrittr)
library(RColorBrewer)

nc <- st_read(system.file("shape/nc.shp", package = "sf")) %>% 
    st_transform(crs = 4326)
points <- data.frame(p = seq(15, 75, 15), 
                     long = c(-85, -80, -78, -75, -82), 
                     lat = c(34, 36, 37, 38, 35)) %>% 
        st_as_sf(coords = c('long', 'lat'), crs = 4326) 
points$p_cut <- cut(points$p, seq(0, 100, 20))

#plot1
plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
     pal = brewer.pal(5, 'Paired'))
plot(st_geometry(nc), axes = TRUE, graticule = TRUE, add = TRUE)

multipolygon не появляется, но если я инвертирую порядок:

#plot2
plot(st_geometry(nc), axes = TRUE, graticule = TRUE)
plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
     pal = brewer.pal(5, 'Paired'), add = TRUE)

Две точки и ключ отсутствуют на финальном сюжете.

Как мне преодолеть эти проблемы?Я думал об изменении bbox объекта multipolygon, чтобы пропущенные точки появлялись на втором графике, но я не мог найти способ для этого.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ.

Изменен epsg multipolygon для соответствия points epsg.Однако проблема остается.

EDIT2. Это странно, но случайный запуск кода, похоже, приводит к "правильному графику".Я использовал этот конкретный порядок (скопировано с консоли):

> plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
+      pal = brewer.pal(5, 'Paired'))
> plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
+      pal = brewer.pal(5, 'Paired'), add = TRUE)
> plot(st_geometry(nc), axes = TRUE, graticule = TRUE, add = TRUE)
> #plot2
> plot(st_geometry(nc), axes = TRUE, graticule = TRUE)
> plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
+      pal = brewer.pal(5, 'Paired'), add = TRUE)
> # plot1
> plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
+      pal = brewer.pal(5, 'Paired'))
> plot(st_geometry(nc), axes = TRUE, graticule = TRUE, add = TRUE)
> plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, 
+      pal = brewer.pal(5, 'Paired'), add = TRUE)

и получил это:

Появляется одна из пропущенных точек (-85,34), но повторяютсяточки.Также ключ не отображается должным образом.Кажется также, что расположение повторяющихся точек и размер мультиполигона зависят от размера средства просмотра графика.

1 Ответ

0 голосов
/ 24 мая 2018

Я использовал пустой график с экстентом большего графика (в этом случае больший экстент принадлежит объекту points) и добавил к нему объекты points и multipolygon:

# sf object with the extent of the points object
bb_sol <- data.frame(long = c(-85, -75, -75, -85),
                     lat = c(34, 34, 38, 38)) %>% 
        st_as_sf(coords = c('long', 'lat'), crs = 4326)
# plot extent
plot(st_geometry(bb_sol), axes = TRUE, graticule = TRUE, pch = '.')
# plot the multipolygon
plot(st_geometry(nc), axes = TRUE, graticule = TRUE, add = TRUE)
# plot the points
plot(points['p_cut'], axes = TRUE, graticule = TRUE, pch = 16, key.pos = NULL, 
pal = brewer.pal(5, 'Paired'), add = TRUE)

Что дает:

Пропущенные точки появляются, но нет ключа.Чтобы добавить ключ, я попытался использовать функцию .image_scale_factor(), но с нет хороших результатов .

...