Несогласованное поведение 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")