如果未指定任何外观,请使用geom_sf绘制图例

时间:2019-12-09 12:56:14

标签: r ggplot2 legend sf

使用ggplot / geom_sf绘制地图时,图例中会表示任何映射到美学的图层。我也知道,使用show.legend = ...可以强制使用图例表示并操纵所使用的符号系统(点,线,面)。但是,当绘制简单对象而不需要进一步将它们映射到美学上时,即使用颜色/填充来显示附加信息时,没有给出图例输入。使用show.legend = TRUE时似乎也是如此。我在GitHub上发现了这个问题:https://github.com/tidyverse/ggplot2/issues/3636。我不确定询问的人是否被正确理解,但似乎没有一个好的答案。因此,使用他的代码:

library(ggplot2)
library(sf)

nc <- st_read(system.file("shape/nc.shp", package = "sf"))
ggplot(nc) + geom_sf(show.legend = TRUE)

无法生成图例。我希望图例仅以与地图所示相同的颜色显示一条线,并为其指定名称。我可以使用以下解决方法添加图例:

ggplot() +
  geom_sf(aes(fill = "US State borders"), nc, show.legend = "line")

但是,这现在会更改绘制图层的颜色。好的,让我们尝试指定一种颜色:

ggplot() +
  geom_sf(aes(fill = "US State borders"), nc, fill = "grey", show.legend = "line")

糟糕,再次失去了图例,可能是因为我现在两次指定了fill。使用ggplot / geom_sf真的不可能吗?

1 个答案:

答案 0 :(得分:1)

如果我对问题的理解正确,那么在scale_fill_manual()中指定填充颜色应该可以解决问题:

  ggplot() +
    geom_sf(aes(fill = "US State borders"), nc, show.legend = "line") +
    scale_fill_manual(values = 'grey') +
    labs(fill = '') # removing legend title