r - 在线串几何图形ggplot内填充颜色或将线串转换为多面体
问题描述
我想使用一些映射包中提供的 sf 映射,例如 rworldmap。我既不能在几何内部着色,也不能转换为允许我使用 fill= 参数的多面体。
backg= sf::st_as_sf(rworldmap::coastsCoarse)
ggplot()+geom_sf(data=backg)
我知道,因为这是一个字符串,所以填充参数不起作用。
ggplot()+geom_sf(data=backg,fill='blue')
但也尝试转换为多面体失败
MP=st_cast(backg,'MULTIPOLYGON')
无论如何,在一行/多字符串 sf 内有颜色吗?
解决方案
这是可能的,但线串不一定能做出想要的漂亮多边形。您的示例中的问题是 sf 对象的第 96 行包含少于 4 个点,因此无法将其转换为多边形。但是,如果将其删除,则可以执行转换(在geometry
列上):
datab = sf::st_as_sf(rworldmap::coastsCoarse)
datab <- datab[-96,]
datab$geometry <- sf::st_cast(datab$geometry, "POLYGON")
这现在允许您进行绘图,但在这里您可以看到将线串转换为闭合多边形的问题。如果线串的起点和终点在不同的点,您将在起点和终点之间得到一条人工连接线。在这个例子中,这破坏了非洲、欧亚大陆和南美洲的外观:
ggplot() +
geom_sf(data = datab, aes(fill = as.factor(seq(nrow(datab))))) +
theme(legend.position = "none")
推荐阅读
- github - 如何在使用我的 github 帐户 libked 的 Web 应用程序上反映我的 github 提交
- c# - 如何将枚举泛型类型的变量转换为 int 并返回
- r - 有条件地更新列中信息的更好方法
- flutter - Dart 2.12 中以前使用带有 runtimeType 的 switch 的可能性是什么?
- sql - 删除列的实体框架代码第一次迁移问题
- progressive-web-apps - 同一主机上的多个 PWA,但端口不同 - 相同的来源行为
- ruby-on-rails - Ruby on Rails:具有现有对象的嵌套表单
- python - 为什么我需要将 python 协程包装到任务中/何时使用任务或协程?
- java - iText 7 Android 图片从相机或画廊到 pdf
- jupyter-notebook - 如何让 Jupyter 实验室将文件识别为不是 .ipynb 的笔记本?