简体   繁体   中英

Add line legend to geom_sf

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM