使用Ggplot和sf叠加两个多边形图层(.shp)

5
我有两个多边形的'.shp'文件。我需要通过填充一个变量使其中一个出现在地图上,另一个则仅出现在边界上,重叠在第一个上。
我已经使用了'ggplot2'和'sf'。我使用'ggplot'和'geom_sf'绘制了一张地图('map1'),它由多边形层组成。我使用'map1'中包含的变量('var1')作为'fill'。
现在,我需要添加(覆盖)另一层多边形在顶部('map2')。这将必须是'透明填充'或'无填充'。只显示边框的轮廓。
library(ggplot2); library(sf)

map1 <- st_read("m1.shp") #reading polygon layer map 1

map2 <- st_read("m2.shp")#reading polygon layer map 2 

g <- ggplot(map1, aes(fill = var1)) + 
    geom_sf() 

我该如何添加“map2”以覆盖这张地图?

实现的想法是:

g <- ggplot(map1, aes(fill = var1)) + 
    geom_sf() +
ggplot(map2, aes()) + 
    geom_sf() 

#Error: Don't know how to add ggplot(map2, aes()) to a plot

你可以向ggplot中添加图层(不仅限于sf相关的图层),例如ggplot(data) + geom_line() + geom_point()。你只需要调用一次ggplot,然后就可以在创建的对象上添加多个图层。如果你需要针对某个图层使用特定的数据,请在geom中使用data参数。 - camille
关于这个错误:https://stackoverflow.com/q/50121712/5325862 - camille
1个回答

7
每个geom_SOMETHING()函数都有一个"data"参数,您可以在其中配置正在使用的数据。此参数在ggplot()函数中的"data"参数扮演相同的角色。当您在ggplot中指定"data"时,所有其他的geom_SOMETHING()函数都会继承该参数。在"aes()"中的参数也是如此。
因此,第一个建议是从ggplot中删除"data = map1"和"aes"参数,并将其添加到geom_sf函数中。
g <- ggplot() + geom_sf(map1, aes(fill = var1)) + geom_sf(map2)

此外,请查看这个教程 - Orlando Sabogal
4
当我添加了 data = 后,这段代码就起作用了。g <- ggplot() + geom_sf(data = map1, aes(fill = var1)) + geom_sf(data = map2)。如果没有 data = 参数,会出现以下错误:Error: 'mapping' must be created by 'aes()'. 谢谢! - Patricia Bermudi
2
为了在覆盖地图上实现透明填充: ggplot() + geom_sf(data = map1, aes(fill = var1)) + geom_sf(data = map2, alpha = 0) - Patricia Bermudi
1
@Patricia 我已经尝试了大约3个小时来解决这个问题,你的提示添加“data =”解决了它 - 非常感谢你! - Pad

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