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

如何在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芯片)

原效果展示

R绘制的带气泡的地图


解决办法

要让气泡根据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())

关键说明

  1. 颜色映射逻辑:把color=value放入aes()内部,让ggplot自动根据数值生成渐变色彩;
  2. 移除固定颜色:保留color="mediumblue"会覆盖映射规则,必须删除;
  3. 自定义配色:scale_color_viridis_c是色盲友好的连续型配色,也可以用scale_color_continuous(low="lightblue", high="darkblue")自定义渐变色区间。

内容的提问来源于Stack Exchange,提问作者ruese

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:30:25