ggmap如何添加自定义离散填充色向量并合并气泡与填充色图例
问题1:自定义填充色不生效的调整方案
ggplot2中同一美学映射(此处为fill)不能同时设置两个标度函数,你当前代码中已经调用了scale_fill_discrete,所以后续添加的scale_fill_manual会被覆盖失效,直接替换原有离散填充标度即可:
- 删除原有代码中的
scale_fill_discrete(guide = guide_legend(override.aes = list(size = 4)))行 - 新增
scale_fill_manual传入自定义颜色向量,示例如下:
# 替换为你自己的自定义颜色向量,长度要和Super_Region的类别数一致 custom_colors <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33") map_K30 <- ggmap(get_googlemap(center = c(lon=180.000, lat=36.659), zoom=2, maptype = 'terrain', color = 'color')) + geom_point(data = results, aes(x = lon, y = lat, size = Genetic_Similarity, fill= Super_Region), shape = 21, alpha = .8) + scale_size_area(max_size = 15) + # 替换原有scale_fill_discrete的位置 scale_fill_manual(values = custom_colors)
问题2:合并双图例并添加标注的实现方案
可以通过统一两个标度的图例名称、自定义标签内容的方式实现需求,无需额外插入表格:
实现逻辑:
- 给
scale_size_area和scale_fill_manual设置完全相同的name参数,ggplot2会自动将同名称的图例合并 - 自定义图例标签,将
Super_Region名称和Genetic_Similarity百分比拼接为标签文本 - 在图例引导参数中设置合适的气泡大小匹配实际映射规则
完整修改后代码示例:
results <- read.csv("A.csv") # 先预处理生成图例标签:区域名+百分比 results$legend_label <- paste0(results$Super_Region, ":", scales::percent(results$Genetic_Similarity, accuracy = 0.1)) # 自定义颜色向量,按你的需求调整 custom_colors <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33") map_K30 <- ggmap(get_googlemap(center = c(lon=180.000, lat=36.659), zoom=2, maptype = 'terrain', color = 'color')) + geom_point(data = results, aes(x = lon, y = lat, size = Genetic_Similarity, fill= Super_Region), shape = 21, alpha = .8) + # 大小标度设置和fill标度相同的name,同时指定标签和引导样式 scale_size_area(max_size = 15, name = "区域遗传相似性", labels = results$legend_label, guide = guide_legend(override.aes = list(fill = custom_colors))) + # 填充标度和size标度用相同的name,实现图例合并 scale_fill_manual(values = custom_colors, name = "区域遗传相似性", labels = results$legend_label, guide = "none") # 关闭fill独立图例,只保留合并后的size图例
如果你的数据集内每个Super_Region对应多个Genetic_Similarity值,可以先统计每个区域的代表值(如均值、最值)再生成标签即可。
内容的提问来源于stack exchange,提问作者Gene100
相关产品推荐
相关产品推荐

