You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:45:44