Несогласованное поведение ggplot при добавлении точек на sf-карты

С помощью ggplot Я хочу добавить баллы к sfкарта. Возьмите этот код:

       ggplot(data = shapefile) +
  geom_sf()+
  geom_point(x = -70.67,y =-33.45, size = 10, colour = "red")

Этот код отлично работает с одним из моих шейп-файлов, но не работает с другим, и я не знаю почему. Вот вывод кода с моим первым шейп-файлом:

А вот вывод кода со вторым шейп-файлом:

Возможные причины, по которым второй вызов не распознает координаты? Единственная разница, которую я вижу между двумя графиками, заключается в том, что на первом долгота и широта аннотируются численно, а на втором - после ориентации север / юг и восток / запад.

1 ответ

Решение

Непоследовательное поведение связано с разными проекциями для каждого шейп-файла. Обычно вам необходимо указать местоположения точек, которые соответствуют единицам используемой вами проекции. Вы можете либо преобразовать точки в проекцию вашего шейп-файла, либо, если вам все равно, находятся ли данные в географической системе координат, вы можете преобразовать в 4326, что является широтой / долготой в системе координат WGS84.

Метод 1. Сохранение проекции шейп-файла. Этот метод преобразует ваши точки в пространственные sf тип данных, поэтому вы можете просто построить с geom_sf.

pts <- st_point(c(-70.67, -33.45)) %>% st_sfc() %>% st_as_sf(crs=st_crs(4326))

ggplot(data = shapefile) +
  geom_sf() +
  geom_sf(data = pts, size = 10, colour = "red")

Метод 2: преобразование шейп-файла в EPSG 4326.

ggplot(data = shapefile %>% st_transform(st_crs(4326))) +
  geom_sf() +
  geom_point(x = -70.67,y =-33.45, size = 10, colour = "red")
Другие вопросы по тегам