Предположим, я хочу создать карту мира с границами. Антарктида мне в сюжете не нужна, поэтому фильтрую ее из данных карты.
library(dplyr)
library(ggplot2)
library(maps)
world_map <- map_data("world") %>%
filter(region != "Antarctica")
Однако, если я добавлю borders() к графику, он появится снова, потому что функция берет данные о границах прямо из пакета карт, включая Антарктиду.
ggplot()+
geom_polygon(data = world_map, aes(x = long, y = lat, group = group))+
borders()
Есть ли способ исключить это, возможно, используя аргумент regions? Я не смог найти способа, кроме как поиграться с ylim = c(-55, 90), , как предложено в другом посте , и это работает. Однако это также кажется очень грубым решением, которое может сработать в этом конкретном случае, но не в большинстве других.





Вы можете использовать colour = и fill =, чтобы определить границы карты и цвета заливки:
library(dplyr)
library(ggplot2)
library(maps)
world_map <- map_data("world") %>%
filter(region != "Antarctica")
ggplot() +
geom_polygon(data = world_map,
aes(x = long, y = lat, group = group),
colour = "black",
fill = "grey")
Однако учтите, что geom_polygon — не лучшая геометрия для работы с геопространственными данными. Если вам нужна карта, соответствующая географическим нормам, проще всего использовать пакет rnaturalearth. Набор данных ne_countries() world представляет собой научно-фантастический объект и имеет определенный CRS. Таким образом, вы можете использовать geom_sf(), чтобы построить график. Это гораздо более надежный и простой подход, поскольку ggplot2 выполняет за вас большую часть «тяжелой работы», например: нет необходимости объявлять эстетику x и y:
library(rnaturalearth)
world_map1 <- ne_countries() %>%
filter(sovereignt != "Antarctica")
ggplot() +
geom_sf(data = world_map1,
colour = "black",
fill = "grey")
Чтобы обеспечить отображение текста по оси Y, а самые северные и южные объекты не касаются края графика (что лично мне не нравится), вы можете использовать что-то вроде:
ggplot() +
geom_sf(data = world_map1,
colour = "black",
fill = "grey") +
coord_sf(expand = FALSE) +
scale_y_continuous(limits = c(-58, 90))