У меня есть несколько карт, которые я генерирую в R
с использованием библиотеки sf
, и мне бы хотелось иметь красивую легенду. К сожалению, кажется, что стандартной легендой для geom_sf()
являются эти безобразно выглядящие коробки . Единственный пост SO, который я мог найти о корректировке фигур в ggplot2
легендах, это здесь .
Здесь используется guides(colour = guide_legend(override.aes = list(shape = 16)))
;однако, похоже, что это работает только для geom_point()
, а не для geom_sf()
.
Если кто-то не может предложить альтернативный метод изменения формы объектов легенды, мне потребуется разработать собственную легенду в Inkscape и выровнятьэто вместе с различными картами.
Вот фрагмент кода, чтобы показать, что я уже пробовал:
legend <- image_read_svg('https://svgshare.com/i/FDV.svg')
p1 <- ggplot() +
geom_sf(data=otherroads, size = .45, aes(color=SUFTYPABRV)) +
geom_sf(data=allroads, size = .55, aes(color=SUFTYPABRV)) +
scale_color_manual(values = plotcolors, guide = "legend") + theme_map() +
labs(title = "Sydney")
ggdraw() +
draw_plot(p1) +
draw_image(legend, width = 0.4, hjust = -0.75, vjust = 0.43)
Пример расположения хорошей легенды
Выход выглядит хорошо в этом случае;однако, это не будет работать для меня, потому что это требует ручной настройки для каждого сюжета.
Мне бы хотелось, чтобы местоположение этой легенды было динамически размещено в соответствии с объектом ggplot, который зависит от города, который я черчу.
Пример расположения плохой легенды
Код (и данные) целиком можно клонировать из github: https://github.com/moldach/map-help.git