使用ggplot与sf按类别着色时,多点要素颜色未区分问题
问题根源
你用st_multipoint()创建的是包含所有城市坐标的单一多点几何对象,将其与4行属性数据绑定后,这个单一几何会被重复匹配到每一行属性上。ggplot绘制时,每一行都会绘制完整的多点,后续行的颜色会覆盖之前的,最终所有点呈现单一颜色,无法按name区分。
解决方法
要让每个城市对应独立的点要素(而非共享一个多点),可以按以下方式修改代码:
方式1:逐个创建点要素
# 定义坐标矩阵 coords <- rbind( c(0.1, 51.5), c(11.3, 44.4), c(-3.7, 40.4), c(2.3, 48.8) ) # 为每个坐标创建独立的st_point,组合成st_sfc gm.points <- st_sfc( lapply(1:nrow(coords), function(i) st_point(coords[i,])), crs = 'EPSG:4326' ) # 绑定属性与几何 gmsf.point <- st_sf(df.attr, geometry = gm.points) # 绘图 ggplot(gmsf.point) + geom_sf(aes(color = name))
方式2:用st_as_sf直接转换
# 给属性数据框添加经纬度列 df.attr$lon <- c(0.1, 11.3, -3.7, 2.3) df.attr$lat <- c(51.5, 44.4, 40.4, 48.8) # 直接转换为sf对象 gmsf.point <- st_as_sf(df.attr, coords = c("lon", "lat"), crs = "EPSG:4326") # 绘图 ggplot(gmsf.point) + geom_sf(aes(color = name))
这样每个城市对应一个独立的点要素,ggplot就能根据name为每个点赋予不同颜色。
内容的提问来源于stack exchange,提问作者Bruno Conte Leite
相关产品推荐
相关产品推荐

