在线串几何图形ggplot中填充颜色或将线串转换为多多边形

时间:2020-10-29 14:36:34

标签: r ggplot2 sf

我想使用某些映射包(例如rworldmap)中提供的sf映射。我既不能在几何图形内部着色,也无法转换为允许使用fill =参数的多多边形。

backg= sf::st_as_sf(rworldmap::coastsCoarse)
ggplot()+geom_sf(data=backg)

我知道由于这是一个字符串,所以fill参数不起作用。

ggplot()+geom_sf(data=backg,fill='blue')

但是尝试转换为多多边形失败

MP=st_cast(backg,'MULTIPOLYGON')

在行/多串sf内是否有颜色?

1 个答案:

答案 0 :(得分: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")

enter image description here