【问题标题】:Dynamically align plots (custom ggplot2 legend for spatial maps) in RR中的动态对齐图(空间图的自定义ggplot2图例)
【发布时间】:2019-09-30 16:47:50
【问题描述】:

我使用sf 库在R 中生成了许多地图,我希望有一个漂亮的图例。不幸的是,geom_sf() 的标准图例似乎是这些ugly looking boxes。我能在ggplot2 传说中找到关于调整形状的唯一 SO 帖子是here

这里是使用guides(colour = guide_legend(override.aes = list(shape = 16)));然而,这似乎只适用于geom_point() 而不适用于geom_sf()

除非有人可以提出改变图例对象形状的替代方法,否则我需要在 Inkscape 中设计一个自定义图例,并将其与各种地图对齐。

这是代码的 sn-p 以显示我已经尝试过的内容:

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)

Good legend location example

在这种情况下,输出看起来不错;但是,这对我不起作用,因为它需要对每个情节进行手动调整。

我想要的是根据 ggplot 对象动态放置此图例的位置,这取决于我正在绘制的城市。

Bad legend location example

完整的代码(和数据)可以从 github 克隆:https://github.com/moldach/map-help.git

【问题讨论】:

    标签: r ggplot2 legend


    【解决方案1】:

    这个答案不是为了解决图例位置,而是改变图例图标。从您的示例中,我收集到您的数据会生成一个默认情况下看起来像这样的图例:

    # example from the geom_sf help page
    nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
    
    # throwing in some random categorical data
    nc$catvar <- sample(LETTERS[1:5], nrow(nc), replace = TRUE)
    
    ggplot(nc) +
      geom_sf(aes(colour = catvar))
    

    不久前,ggplot 添加了通过隐式(通过省略号)将key_glyph 参数添加到所有图层(例如geoms 和stats)来设置您想要的图例形状的功能。

    ggplot(nc) +
      geom_sf(aes(colour = catvar), key_glyph = "timeseries")
    

    您可以使用它来将字形设置为点,然后使用 override.aes 技巧来获得您想要的形状。

    ggplot(nc) +
      geom_sf(aes(colour = catvar), key_glyph = "point") +
      guides(colour = guide_legend(override.aes = list(size = 3, shape = c(15:19))))
    

    它应该适用于 ggplot 中已有的所有常规图例放置工具。您可能必须为绘图指定特定位置,但至少在添加图例之前不必先将图例导出到 svg 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-29
      • 2018-03-19
      • 2017-04-21
      • 2019-04-15
      • 1970-01-01
      • 2016-10-05
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多