geom_sf отображение точек / фигур - PullRequest
2 голосов
/ 03 ноября 2019

Я использую пакет Tigris для загрузки файлов фигур с кодом,

options(tigris_class = "SF") 

Хотя я легко могу отобразить полигоны

ggplot(data=zctas) +
  geom_sf(aes())

Я изо всех сил пытаюсь создать маркер / точкувместо заполненного многоугольника (например, фигуры, подобной кругу внутри zctas) в файле формы, который я вытащил из tigris, не будет lat / long для отображения AES по x и y. Файл формы имеет столбец «геометрия», и мне интересно, могу ли я это использовать?

Документация здесь, https://ggplot2.tidyverse.org/reference/ggsf.html

указывает на то, что geom_sf может быть использован иди создавать точки? (Я предполагаю, используя центроид многоугольника zctas?), Но я не смог найти пример? Благодарен за любые ресурсы для идентификации кода, отображающего точки из этого сгенерированного Tigris-файла формы, и / или советы и / или альтернативные подходы.

Ответы [ 2 ]

5 голосов
/ 03 ноября 2019

Вы ищете stat_sf_coordinates(), здесь описано .

library(ggplot2)

nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
#> Reading layer `nc' from data source `/Library/Frameworks/R.framework/Versions/3.6/Resources/library/sf/shape/nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> epsg (SRID):    4267
#> proj4string:    +proj=longlat +datum=NAD27 +no_defs

ggplot(nc) +
  geom_sf()

ggplot(nc) +
  geom_sf() +
  stat_sf_coordinates()
#> Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
#> not give correct results for longitude/latitude data

ggplot(nc) +
  geom_sf() +
  geom_point(
    aes(color = SID74, size = AREA, geometry = geometry),
    stat = "sf_coordinates"
  ) +
  scale_color_viridis_c(option = "C") +
  theme(legend.position = "bottom")
#> Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
#> not give correct results for longitude/latitude data

Создано в 2019-11-03 пакетом Представить (v0.3.0)

Один комментарий ооператор geometry = geometry внутри вызова aes() последнего примера: и geom_sf(), и stat_sf_coordinates() автоматически сопоставят столбец геометрии, если они найдут его в наборе данных. Тем не менее, geom_point() не знает о столбцах геометрии и, следовательно, не автоматизирует, поэтому мы должны отобразить вручную.

3 голосов
/ 03 ноября 2019

Если я правильно понимаю, чего вы пытаетесь достичь, возможно, вам просто нужно преобразовать ваши данные в точки с помощью функции st_centroid() ... в самом простом виде, например:

ggplot(data=st_centroid(zctas)) +
  geom_sf()

Или, возможно:

ggplot(data=st_centroid(st_geometry(zctas))) +
  geom_sf()

Для получения дополнительной информации и примеров см .: https://r -spatial.github.io / sf / article / sf5.html

...