我的问题结合了之前在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" )
Error: length(rows) == 1 is not TRUE
,这似乎是由于调用show.legend = "line"
导致的——如果我排除show.legend
,就没有问题,只是图例图形是填充而不是线条。 - C Sevggplot2_2.2.1.9000
和sf_0.5-4
没有任何错误信息。 - Gilles San Martin