使用geom_sf

时间:2018-02-14 16:20:14

标签: r plot ggplot2 legend sf

我的问题结合了之前在Stackoverflow上发布的两个单独的问题:i。 Adding multiple legends to ggplot和ii。 Add line legend to geom_sf

我想向ggplot2添加多个图例(如第一篇文章中所述),但我正在使用sf。这使填充审美空间变得复杂。答案在我提出。上面的方法不适用于多种类型的几何 - 我们不能将点和线分配给单个类,然后使用因子。在我的例子中,我有几个line和point shapefile,只是想为每个添加的shapefile添加一个单独的图例条目。

似乎没有必要调用aes(),但aes()可能是调用图例的唯一方法。

可重复的示例

我想做类似以下的事情(从(i)借用),但是 没有 as.factor以便我可以进行单独调用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)

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

那就是更像是:

ggplot() + 
 geom_sf(data= dataset1, color="red" ) +
 geom_sf(data= dataset2, color="blue" )

1 个答案:

答案 0 :(得分:2)

我不确定我到底知道你想要什么。 在这里,我们映射值&#34; A&#34;和&#34; B&#34;为了获得图例而使用颜色aestetic然后我们使用scale_color_manual

自定义颜色
dataset1 <- st_sf(st_sfc(list(line1)))
dataset2 <- st_sf(st_sfc(list(line2)))

ggplot() + 
    geom_sf(data= dataset1, aes(color="A"), show.legend = "line") +
    geom_sf(data= dataset2, aes(color="B"), show.legend = "line") +
    scale_color_manual(values = c("A" = "red", "B" = "blue"), 
                       labels = c("Line1", "Line2"),
                       name = "Which line ?") 

https://angular.io/api/common/DatePipe