Last active
January 1, 2023 17:33
-
-
Save ikashnitsky/cf2c29a29d39f79bb1c857a4fefc2cd4 to your computer and use it in GitHub Desktop.
Give an example how and why to use line borders instead of polygons outlines in maps -- https://ikashnitsky.github.io/2023/map-borders
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#=============================================================================== | |
# 2020-04-08 -- twitter upd 2023-01-01 ik-q | |
# Showcase the map hack -- use border lines instead of polygon outlines | |
# https://twitter.com/ikashnitsky/status/1247875600305598464 | |
# https://ikashnitsky.github.io/2023/map-borders | |
# Ilya Kashnitsky, ilya.kashnitsky@gmail.com | |
#=============================================================================== | |
library(tidyverse) | |
library(sf) | |
set.seed(911) | |
# subset Greence, NUTS-3 regions | |
library(eurostat) | |
greece <- eurostat_geodata_60_2016 %>% | |
filter(LEVL_CODE==3, | |
str_sub(geo, 1, 2) == "EL") %>% | |
# create random values for filling the ploygons | |
mutate(random = runif(length(id))) %>% | |
select(id, geometry, random) %>% | |
st_transform(crs = 3035) | |
# plot with polygon outlines | |
greece %>% | |
ggplot()+ | |
geom_sf(aes(fill = random), color = 2, size = 1)+ | |
labs(title = "Polygons outlined")+ | |
scale_fill_viridis_c(begin = .5)+ | |
theme_map()+ | |
theme(plot.background = element_rect(color = NA, fill = "#eeffff")) | |
gg_outline <- last_plot() | |
# produce border lines with rmapshaper::ms_innerlines() | |
library(rmapshaper) | |
bord <- greece %>% ms_innerlines() | |
# now plot without polygon outlines and with borders as lines | |
greece %>% | |
ggplot()+ | |
geom_sf(aes(fill = random), color = NA)+ | |
geom_sf(data = bord, color = 2, size = 1)+ | |
labs(title = "Borders as lines")+ | |
scale_fill_viridis_c(begin = .5)+ | |
theme_map()+ | |
theme(plot.background = element_rect(color = NA, fill = "#eeffff")) | |
gg_bord <- last_plot() | |
# put side by side | |
library(patchwork) | |
( | |
gg_outline + gg_bord | |
) + | |
plot_layout(guides = "collect")+ | |
plot_annotation( | |
caption = "! Look at the islands", | |
theme = theme(plot.background = element_rect(color = NA, fill = "#eeffff")) | |
) | |
ggsave("out.png", width = 6, height = 3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment