Добавить легенду линии в geom_sf

У меня есть пара файлов пространственных форм с различными маршрутами общественного транспорта, и я хотел бы создать карту, используя библиотеки ggplot2 и sf. Проблема здесь в том, что я вручную назначаю цвета нескольким конкретным маршрутам, но мне не удалось добавить легенду к сюжету.

Есть идеи, как это сделать с помощью geom_sf?

Воспроизводимый пример

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" )

введите описание изображения здесь

Я знаю, что можно было бы сделать что-то вроде этого:

  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"))

введите описание изображения здесь

Однако я работаю с более чем одним шейп-файлом, поэтому мне нужно использовать более одного geom_sf. Кроме того, я хотел бы, чтобы легенда выглядела как линейная легенда, а не как легенда многоугольника.


person rafa.pereira    schedule 27.12.2017    source источник


Ответы (1)


Здесь мы можем использовать аргумент show.legend из geom_sf.

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

Описание show.legend от ?geom_sf

логично. Стоит ли включать этот слой в легенды? NA, по умолчанию, включает в себя отображение эстетики. ЛОЖЬ никогда не включает, а ИСТИНА всегда включает. Вы также можете установить одно из значений «многоугольник», «линия» или «точка», чтобы переопределить легенду по умолчанию.

person markus    schedule 27.12.2017