首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用facet_grid绘制以普通多边形为覆盖层的多个空间多边形

用facet_grid绘制以普通多边形为覆盖层的多个空间多边形
EN

Stack Overflow用户
提问于 2020-02-19 12:26:01
回答 1查看 482关注 0票数 3

我想从SpatialPolygonDataframe中绘制空间数据。更具体地说,我希望使用facet_grid() of ggplot2在单个子图中绘制单个空间特征。此外,我还想在每个方面绘制一个常见的空间多边形作为重叠。

这里是一个使用美国及其单一州的空间数据集的例子。每个状态(子集)应该显示在一个方面中),而美国的轮廓(在另一个空间数据集中提供)应该被绘制为每个方面中的覆盖。在我目前的尝试中,还拆分了“美国大纲”(基于ID),并将其扩展到各个方面:

代码语言:javascript
复制
library(sf)
library(ggplot2)

usa <- as(st_as_sf(maps::map(database="usa",fill=T, plot =FALSE)),"Spatial")
usa_states <- as(st_as_sf(maps::map(database="state",fill=T, plot =FALSE)),"Spatial")
usa_states <- usa_states[c(1:5),]

ggplot(data=usa_states)+
  geom_polygon(data=usa, aes(x = long, y = lat,group=id), 
               size = 1, colour = "red",fill=NA)+
  geom_polygon(data=usa_states, aes(x = long, y = lat,group=id), 
               size = 0.3, fill = "green",color="black",alpha=0.2)+
  facet_grid(facets= id ~.)

如何指定fact_grid只考虑usa_states数据集的“id”而不拆分“美国”大纲?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 12:41:58

这是解决办法。没有必要将sf转换为sp。您可以使用geom_sf函数。问题在于您的id值在两个数据集中具有相同的名称。

代码语言:javascript
复制
library(sf)
library(ggplot2)
library(dplyr)

usa <- st_as_sf(maps::map(database="usa",fill=T, plot =FALSE))
usa_states <- st_as_sf(maps::map(database="state",fill=T, plot =FALSE))
usa_states <- usa_states[c(1:5),]

usa_states <- usa_states %>% 
  rename(id = ID)

ggplot(data = usa_states)+
  geom_sf(size = 0.3, fill = "green",color="black",alpha=0.2)+
  geom_sf(data = usa ,
               size = 1, colour = "red",fill=NA) +
  facet_wrap(~ id)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60300363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档