使用geom_sf时如何更改图例形状?

时间:2019-08-02 01:52:47

标签: r ggplot2 sf

我正在使用geom_sfggplot绘制点,并希望更改点的形状。我可以在地图上更改它们,但图例永远不会反映出点的形状,即使使用override.aes时也是如此。

我无法确定我是否缺少某些东西,或者这是一个错误。我已经在Tidyverse问题跟踪器中找到了类似的问题,并且this one非常相似。但是"resolved"的问题似乎都没有解决我的问题。

这里是一个示例,显示ggplot如何无法将形状传播到图例。

library(sf)
library(ggplot2)

cities <- tibble::tribble(
  ~ lon,    ~ lat,    ~ name,      ~ pop,
  5.121420, 52.09074, "Utrecht",   311367,
  6.566502, 53.21938, "Groningen", 189991,
  4.895168, 52.37022, "Amsterdam", 779808 
) %>% sf::st_as_sf(coords = c("lon", "lat"), crs = 4326)

lines_sfc <- sf::st_sfc(list(
  sf::st_linestring(rbind(cities$geometry[[1]], cities$geometry[[2]])),
  sf::st_linestring(rbind(cities$geometry[[2]], cities$geometry[[3]]))
))

lines <- sf::st_sf(
  id = 1:2,
  size = c(10,50),
  geometry = lines_sfc,
  crs = 4326
)

ggplot(cities) +
  geom_sf(aes(shape = name))

ggplot(cities) + 
  geom_sf(aes(shape = name)) +
  scale_shape_manual(values = c(1:3),
                     guide = guide_legend(
                       override.aes = list(shape = c(1:3))))

ggplot output

我希望图例条目具有与地图相同的形状,但我会得到空的正方形。

1 个答案:

答案 0 :(得分:2)

ggplot() + 
  geom_sf(data = cities, aes(shape = name), show.legend = "point") +
  scale_shape_manual(values = c(1, 2, 3))

enter image description here