在线串几何图形 ggplot 中填充颜色或将线串转换为多面体
Fill color inside linestring geometry ggplot or convert linestring into multipolygon
我想使用一些地图包中提供的sf地图,比如rworldmap。我既不能在几何体内部着色,也不能转换为允许我使用 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')
line/multistring 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")
我想使用一些地图包中提供的sf地图,比如rworldmap。我既不能在几何体内部着色,也不能转换为允许我使用 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')
line/multistring 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")