r - 使用 ggplot2 在 R 中绘制连接的 sf 几何图形时出错
问题描述
我一直在使用一组网格单元的 shapefile 来制作没有问题的地图。最近,我收到了一个略有不同的网格单元 shapefile,并要求我将两者合并并重新生成相同的地图。现在我已经加入了两个 sf 对象,我无法绘制地图。
我不确定如何为此创建一个代表。shapefile 本身可在此处免费caltrawl.zip
获得:ftp: //ftp.dfg.ca.gov/R7_MR/MANAGEMENT/CRFS/MAN_CA_CRFS_microblocks2013.zip
这是原始代码,绘制得很好(这只是为了将“微块”总结为感兴趣的分辨率以创建更粗/更小的对象):
microblocks <- read_sf("CRFS_microblocks/MAN_CA_CRFS_microblocks2013.shp")
blocks1 <- microblocks %>%
st_buffer(0) %>% # magical function that prevents errors when combining polygons below
group_by(BLOCK10_ID) %>% # so it doesn't just lump into one giant polygon ...
mutate(
Xmean = mean(X),
Ymean = mean(Y)
) %>%
ungroup() %>%
group_by(BLOCK10_ID, Xmean, Ymean) %>%
summarise() %>% # should yield a sf object
ungroup() %>%
st_transform(crs="+proj=longlat +datum=NAD83")
并且ggplot(blocks1) + geom_sf()
工作正常。
但是,当我尝试加入第二个几何图形时caltrawl
...
caltrawl <- read_sf("caltrawl/caltrawl.shp") %>%
dplyr::select(BLOCK10_ID) %>%
blocks2 <- microblocks %>%
st_buffer(0) %>% # magical function that prevents errors when combining polygons below
group_by(BLOCK10_ID) %>% # so it doesn't just lump into one giant polygon ...
mutate(
Xmean = mean(X),
Ymean = mean(Y)
) %>%
ungroup() %>%
group_by(BLOCK10_ID, Xmean, Ymean) %>%
summarise() %>% # should yield a sf object
ungroup() %>%
dplyr::select(-Xmean, -Ymean) %>% # since we're adding more blocks
as.data.frame() %>% # necessary to de-sf-ify to join the other blocks
full_join(caltrawl, by="BLOCK10_ID") %>% # full join retains blocks from both
st_sf(sf_column_name = 'geometry.x') %>%
st_transform(crs="+proj=longlat +datum=NAD83") as.data.frame()
我得到一个绘制良好的对象plot(blocks2)
,但是当我尝试时ggplot(blocks2) + geom_sf()
,我收到以下错误:
Don't know how to automatically pick scale for object of type standardGeneric. Defaulting to continuous.
Error: Column `geometry` must be a 1d atomic vector or a list
还值得注意的是,它们都是 sf 对象,但类在某种程度上有所不同:
> class(blocks1)
[1] "sf" "tbl_df" "tbl" "data.frame"
> class(blocks2)
[1] "sf" "data.frame"
在这种情况下我做错了blocks2
什么?
解决方案
推荐阅读
- node.js - 如何使用 mongoose 从 mongo 文档中删除字段
- azure-devops - Azure DevOps Pipeline ArchiveFiles 从构建文件夹创建空存档
- logstash - 针对@version 的正则表达式条件永远不会满足
- javascript - 焦点 iframe 输入在 Safari 13 中不起作用
- c# - Environment.UserName 返回为 SYSTEM 而不是用户名
- haskell - 在 haskell 中使用匿名与非匿名函数键入
- c# - 如何在 C# 中获取类的变量的引用?
- python - 替换路径dredd钩子中的ID
- python - 我的数据框包含一个时间列,其中“W”和“S”区分“夏季”和“冬季”。如何在不丢失任何数据的情况下进行转换?
- python - 如何使用 Azure Blob 存储 SDK 将 Blob 从一个容器复制到另一个容器