ggplot中geom_sf结合facet_wrap时首图层边界不显示的问题
问题原因解析:geom_sf配合facet_wrap时底图边界不显示的问题
核心原因:全局数据源的分面过滤效应
第一种写法中,ggplot(ct_sf1)将ct_sf1设为全局数据源,而facet_wrap(~group)会基于全局数据的group列做分面过滤——每个分面仅保留对应group值的行数据。
第一个geom_sf没有指定data参数,会默认继承全局的ct_sf1数据,导致每个分面里只会渲染当前group对应的那些区域的灰色底,其余区域完全不绘制,所以看不到完整的边界。
第二种写法生效的逻辑
ggplot() + geom_sf(data = ct_sf,fill = "gray95", color = "gray50", size = 0.5) + geom_sf(data = ct_sf1,aes(fill = group)) + facet_wrap(~group)
这里第一个geom_sf明确指定了无group列的ct_sf作为数据源,分面逻辑无法对它进行过滤——ct_sf里的所有区域会在每个分面完整渲染,作为底图;第二个geom_sf使用带group的ct_sf1,按组分面后仅显示对应区域,底图边界自然正常显示。
补充说明
inherit.aes = F仅控制美学映射(如fill、color)的继承,不会改变数据源的继承行为,所以第一种写法里给第一个geom_sf加这个参数也解决不了问题。
内容的提问来源于stack exchange,提问作者forecaster
相关产品推荐
相关产品推荐

