Как выбрать разные темы для отдельных регионов на карте в R - PullRequest
1 голос
/ 28 октября 2019

Я хочу нанести регионы на карту, используя ggplot и geom_polygons, но я хочу, чтобы у определенных регионов были только границы, а другие были заполнены (я анализирую только 3 региона, но хочу также показать карту окружающих стран)

Я использую функцию map_data и выбираю регионы, которые меня интересуют в c ("Сирия", "Израиль", "Греция"), но я также хочу показать регионы, такие как Египет и Ливия, но только границы, поэтому они невыделиться на визуализации.

Это мой код:

mapdata = map_data("world", regions =c("Syria","Israel","Greece"))

plot2 = ggplot() + geom_polygon(data = mapdata, aes(x=long, y = lat, group = group)) + 
  coord_fixed(1.3) + theme_classic()

Позже я нанесу на него географические точки.

Я пробовал что-то вроде:

dummymap = map_data("world", regions = c("Egypt","Libya"))

[...] + geom_polygon(data = dummymap, aes(x=long, y = lat, group = group)) + theme_bw()

* я меняю тему на bw, но она выводит Египет и Ливию в классическом стиле

Так что я бы хотел, чтобы Греция, Израиль и Сирия были заполнены, а Египет и Ливия граничат только

1 Ответ

0 голосов
/ 28 октября 2019

Вот решение tidyverse + sf

library( tidyverse )
library( sf )

#load countries
mapdata = map_data("world", regions =c("Syria","Israel","Greece","Egypt","Libya"))

#read in points
sf <- st_as_sf( mapdata, coords = c("long", "lat"), crs = 4326 ) %>%
  #group geometries by region + subregion, convert to POLYGON
  group_by( region, subregion ) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast("POLYGON")  %>%
  #repeat, but now group by region (=country), and convert to MULTIPOLYGON
  group_by( region ) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast( "MULTIPOLYGON" )

#now plot the different countries, use `fill` to determine fill-color
#and use `aplha` for country-transparancy.
ggplot( data = sf) + 
  geom_sf( data = sf[ sf$region %in% c("Egypt","Libya"), ], alpha = 0 ) +
  geom_sf( data = sf[ sf$region %in% c("Syria","Israel","Greece"), ], fill = "blue" )

результат

enter image description here

Я не уверен, что преобразование ваших данных в sf -объект необходимо, но оно позволяет легко (и красиво!) Строить графики различными способами, включая мощные опции, такие как leaflet.

...