【问题标题】:Fill color inside linestring geometry ggplot or convert linestring into multipolygon在线串几何ggplot内填充颜色或将线串转换为多面体
【发布时间】:2020-10-29 14:36:34
【问题描述】:

我想使用一些映射包中提供的 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 内着色?

【问题讨论】:

  • backgdatab 是同一个东西吗?
  • 你想给什么上色?
  • @Edo 是的,抱歉,现在更正。我想在大陆内部着色。

标签: r ggplot2 sf


【解决方案1】:

这是可能的,但线串不一定能做出想要的漂亮多边形。您的示例中的问题是 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")

【讨论】:

  • 谢谢,这很不幸,所以我想唯一的方法是手动修改一些点。我想找到带有多边形的海岸线地图会更容易。
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多