在使用geom_sf时,如何向ggplot2添加多个图例?

4

我的问题结合了之前在Stackoverflow上发布的两个不同的问题:i. 给ggplot添加多个图例和ii. 在geom_sf中添加线条图例

我想要给ggplot2添加多个图例(就像第一个帖子中),但是我使用的是sf。这使得填充美学空间变得复杂。在i.中建议的答案无法很好地处理多种类型的几何图形 - 我们不能将点和线分配给单个类,然后使用因子。在我的情况下,我有几个线和点的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个回答

4

我不确定我是否完全理解您想要的内容。在这里,我们将值“A”和“B”映射到颜色美学,以获得图例,然后我们使用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 ?") 

enter image description here


谢谢!这正是我想要的——能够强制设定一个美学,然后稍后再调用它。我没有意识到你可以像这样强制设定一个常量:“A”和“B”。 - C Sev
如果其他人遇到类似问题并尝试合并图例,以下链接可能会有所帮助:将颜色和形状的图例合并为单个图例 - C Sev
虽然现在我遇到了以下错误:Error: length(rows) == 1 is not TRUE,这似乎是由于调用 show.legend = "line" 导致的——如果我排除 show.legend,就没有问题,只是图例图形是填充而不是线条。 - C Sev
提供的代码、ggplot2_2.2.1.9000sf_0.5-4没有任何错误信息。 - Gilles San Martin
好的 - 重启后我也没有遇到这个问题。谢谢! - C Sev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接