如何在ggplot绘制的德国地图中根据数值为气泡着色?
问题:用ggplot绘制德国气泡地图时,无法根据数值为气泡着色
我是一名R语言新手,参考优质文章后成功用ggplot绘制了带气泡的德国地图,气泡大小能反映对应数值,但无法根据数值为气泡着色,求解决办法。
原代码
library(tidyverse) library(magrittr) library(ggplot2) library(maps) library(mapproj) name <- c("Berlin", "München", "Hamburg", "Bremen", "Köln", "Leipzig", "Frankfurt", "Dresden", "Hannover", "Dortmund") lat <- c(52.5234299, 48.1391258, 53.5572548, 53.0749817, 50.9405327, 51.3396912, 50.1108856, 51.0509911, 52.3720665, 51.5110321) long <- c(13.4114361, 11.5802193, 9.995966, 8.8070812, 6.9599056, 12.371356, 8.679492, 13.733633, 9.7356863, 7.4635186) value <- c(350000, 250000, 80000, 70000, 70000, 70000, 50000, 40000, 35000, 35000) data <- data_frame(name, lat, long, value) Germany <- map_data("world") %>% filter(region=="Germany") ggplot() + geom_polygon(data = Germany, aes(x=long, y = lat, group = group), fill="deepskyblue", alpha=0.7) + geom_point( data=data, aes(x=long, y=lat, size=value,), color="mediumblue", alpha=0.5) + scale_size_continuous(range=c(5, 30)) + theme_minimal() + theme(legend.position = 'none', panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text = element_blank(), axis.title = element_blank())
使用环境
- R version 4.3.2
- RStudio Version 2023.12.0+369
- macOS 14.2.1 (Sonoma)(M1芯片)
原效果展示

解决办法
要让气泡根据value数值着色,只需在geom_point的aes参数内添加color=value,同时移除固定的color="mediumblue"(固定颜色会覆盖数值映射的颜色)。如果需要自定义配色,可搭配连续型配色函数优化效果。
修改后完整代码
library(tidyverse) library(magrittr) library(ggplot2) library(maps) library(mapproj) name <- c("Berlin", "München", "Hamburg", "Bremen", "Köln", "Leipzig", "Frankfurt", "Dresden", "Hannover", "Dortmund") lat <- c(52.5234299, 48.1391258, 53.5572548, 53.0749817, 50.9405327, 51.3396912, 50.1108856, 51.0509911, 52.3720665, 51.5110321) long <- c(13.4114361, 11.5802193, 9.995966, 8.8070812, 6.9599056, 12.371356, 8.679492, 13.733633, 9.7356863, 7.4635186) value <- c(350000, 250000, 80000, 70000, 70000, 70000, 50000, 40000, 35000, 35000) data <- data_frame(name, lat, long, value) Germany <- map_data("world") %>% filter(region=="Germany") ggplot() + geom_polygon(data = Germany, aes(x=long, y = lat, group = group), fill="deepskyblue", alpha=0.7) + # 关键修改:将color映射到value,移除固定color参数 geom_point(data=data, aes(x=long, y=lat, size=value, color=value), alpha=0.5) + scale_size_continuous(range=c(5, 30)) + # 可选:使用色盲友好的viridis配色 scale_color_viridis_c(option = "plasma") + theme_minimal() + theme(legend.position = 'none', panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text = element_blank(), axis.title = element_blank())
关键说明
- 颜色映射逻辑:把
color=value放入aes()内部,让ggplot自动根据数值生成渐变色彩; - 移除固定颜色:保留
color="mediumblue"会覆盖映射规则,必须删除; - 自定义配色:
scale_color_viridis_c是色盲友好的连续型配色,也可以用scale_color_continuous(low="lightblue", high="darkblue")自定义渐变色区间。
内容的提问来源于Stack Exchange,提问作者ruese
相关产品推荐
相关产品推荐

