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
相关产品推荐
相关产品推荐

