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

R语言ggmap实现地图坐标点按组颜色编码问题求助

解决ggmap按组别给坐标点颜色编码的问题

我来帮你搞定这个问题!先看看你代码里的几个关键问题:

  • 在aes()里你写了colour="band",这会把"band"当成一个固定字符串,而不是引用df里的band列作为分组变量——所以所有点都会是同一个颜色,加了scale_color_manual当然没变化啦。
  • 你用了shape=21,这个形状是带边框的填充点:它的colour控制边框颜色,fill才是内部填充色。如果想让整个点按组别区分颜色,要么换用shape=19这类实心点(用colour映射),要么用fill来映射分组。
  • guides()的写法不对,得指定对应映射的图例设置,比如用fill映射的话,就写guides(fill=guide_legend(title="组别"))。

下面给你两种修正后的代码方案,按需选就行:

方案1:用实心点(shape=19),靠colour映射组别

# 先获取地图
ponymap <- get_map(location = c(lon = mean(df$lon), lat = mean(df$lat)), 
                   zoom =14, maptype = "satellite", scale = 2)

# 绘图核心:colour=band不带引号,让ggplot识别成分组列
ggmap(ponymap) +
  geom_point(data = df, aes(x = lon, y = lat, colour = band), 
             size = 2, shape = 19) +  # shape=19是实心圆,颜色直接对应组别
  scale_color_manual(values = c("#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF", "#808080")) +  # 7个颜色对应7个组
  guides(colour = guide_legend(title = "组别")) +  # 给图例加个标题
  labs(x = "经度", y = "纬度")  # 可选:给坐标轴加标签

方案2:用带填充的点(shape=21),靠fill映射组别

ponymap <- get_map(location = c(lon = mean(df$lon), lat = mean(df$lat)), 
                   zoom =14, maptype = "satellite", scale = 2)

ggmap(ponymap) +
  geom_point(data = df, aes(x = lon, y = lat, fill = band), 
             size = 2, shape = 21, colour = "black") +  # 统一设置边框为黑色,内部填充色对应组别
  scale_fill_manual(values = c("#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF", "#808080")) +
  guides(fill = guide_legend(title = "组别")) +
  labs(x = "经度", y = "纬度")

小提示:

  • 你可以替换values里的颜色,用R内置的颜色名称(比如"red", "green")或者十六进制颜色码都行,只要数量和你的band组数量(7个)匹配就好。
  • 如果你的band是因子类型,颜色会按因子水平对应;如果是字符型,会按数据里的出现顺序对应,你可以用levels(df$band)查看顺序,调整颜色顺序哦。

内容的提问来源于stack exchange,提问作者ellie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:38