Я хотел бы построить фигуру с несколькими маленькими картами, используя ggplot2::geom_sf
. Задача здесь состоит в том, как сделать так, чтобы все карты были в центре изображения и в одном и том же пространственном масштабе. Вот проблема (данные для воспроизводимого примера ниже):
Простая карта, использующая facet_wrap
, помещает все полигоны в одном пространственном масштабе, но они не центрированы.
ggplot(states6) +
geom_sf() +
facet_wrap(~name_state)
Вот решение этого ТА вопроса , в котором используется cowplot
. В этом случае полигоны центрируются, но имеют разные пространственные масштабы
g <- purrr::map(unique(states6$name_state),
function(x) {
# subset data
temp_sf <- subset(states6, name_state == x)
ggplot() +
geom_sf(data = temp_sf, fill='black') +
guides(fill = FALSE) +
ggtitle(x) +
ggsn::scalebar(temp_sf, dist = 100, st.size=2,
height=0.01, model = 'WGS84',
transform = T, dist_unit='km')
})
g2 <- cowplot::plot_grid(plotlist = g)
g2
Я обнаружил ту же проблему, используя tmap
библиотека.
tm_shape(states6) +
tm_borders(col='black') +
tm_fill(col='black') +
tm_facets(by = "name_state ", ncol=3) +
tm_scale_bar(breaks = c(0, 50, 100), text.size = 3)
Желаемый вывод
Вывод, который я хотел бы получить, выглядит примерно так:
Данные для воспроизводимого примера
library(sf)
library(geobr)
library(mapview)
library(ggplot2)
library(ggsn)
library(cowplot)
library(purrr)
library(tmap)
# Read all Brazilian states
states <- geobr::read_state(code_state = 'all', year=2015)
# Select six states
states6 <- subset(states, code_state %in% c(35,33,53,29,31,23))