Add line legend to geom_sf

给你一囗甜甜゛ 提交于 2019-11-28 08:25:24

问题


I have a couple spatial shape files with various public transport routes and I would like to make a map using ggplot2 and sf libraries. The issue here is that I manually assign colors to a few specific routes but I couldn't manage to add a legend to the plot.

Any idea on how to do this using geom_sf ?

Reproducible example

library(sf)
library(ggplot2)

# reproducible data
  lon<-c(5.121420, 6.566502, 4.895168, 7.626135)
  lat<-c(52.09074, 53.21938, 52.37022, 51.96066)
  cities<-c('utrecht','groningen','amsterdam','munster')
  size<-c(300,500,1000,50)

  xy.cities<-data.frame(lon,lat,cities,size)

  # line example
  line1 <- st_linestring(as.matrix(xy.cities[1:2,1:2]))
  line2 <- st_linestring(as.matrix(xy.cities[3:4,1:2]))

  lines.sfc <- st_sfc(list(line1,line2))
  simple.lines.sf <- st_sf(id=1:2,size=c(10,50),geometry=lines.sfc)

# plot
  ggplot() + 
    geom_sf(data= subset(simple.lines.sf, id==1), color="red" ) +
    geom_sf(data= subset(simple.lines.sf, id==2), color="blue" )

I know it would be possible to do something like this:

  ggplot() + 
    geom_sf(data= subset(simple.lines.sf, id>0), aes(color=factor(id)) ) +
    scale_color_manual(values=c("red", "blue"), 
                       labels=c("route 1", "route 2"))

However, I'm working with more than one shape file so I need to use more than one geom_sf. Also, I would like the legend to look a line legend, not a polygon legend.


回答1:


We can use the argument show.legend from geom_sf here.

ggplot() + 
 geom_sf(data= simple.lines.sf, aes(colour = as.factor(id)), show.legend = "line")

Description of show.legend from ?geom_sf

logical. Should this layer be included in the legends? NA, the default, includes if any aesthetics are mapped. FALSE never includes, and TRUE always includes. You can also set this to one of "polygon", "line", and "point" to override the default legend.



来源:https://stackoverflow.com/questions/47996634/add-line-legend-to-geom-sf

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!