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

基于ggplot绘制含阿拉斯加、夏威夷的美国50州气泡图技术咨询

嘿,这个需求我熟!用ggplot+maps包完全能做出类似Plotly的美国50州气泡图,重点就是搞定阿拉斯加和夏威夷的位置调整,我给你一步步拆解:

第一步:加载必要的包并准备地图数据

首先得把需要的包装上(第一次用的话运行),然后获取美国州的地图数据,再手动调整阿拉斯加和夏威夷的坐标,让它们能和美国本土放在同一张图里:

# 安装包(第一次用的话运行)
install.packages(c("ggplot2", "maps", "dplyr"))

# 加载包
library(ggplot2)
library(maps)
library(dplyr)

# 获取美国各州的地图数据(包含经纬度和州名)
us_states <- map_data("state")

# 调整阿拉斯加和夏威夷的位置:缩小+平移
us_states_adj <- us_states %>%
  mutate(
    # 阿拉斯加:缩小到原来的30%,然后平移到美国本土右下角区域
    long = ifelse(region == "alaska", long * 0.3 + 180, long),
    lat = ifelse(region == "alaska", lat - 10, lat),
    # 夏威夷:平移到阿拉斯加下方的合适位置
    long = ifelse(region == "hawaii", long + 50, long),
    lat = ifelse(region == "hawaii", lat - 1, lat)
  )
第二步:同步调整你的数据集坐标

你的数据集里的阿拉斯加和夏威夷的经纬度是原始位置,必须和地图做同样的调整,不然气泡会飘到地图外面!这里我假设你的数据集叫zip_data,包含lon(经度)、lat(纬度)、amount、score这几个字段:

zip_data_adj <- zip_data %>%
  mutate(
    # 匹配阿拉斯加的原始经度(一般小于-140),做同样的缩放和平移
    lon = ifelse(lon < -140, lon * 0.3 + 180, lon),
    lat = ifelse(lon < -140, lat - 10, lat),
    # 匹配夏威夷的原始经度范围(-160到-150之间),做平移
    lon = ifelse(lon > -160 & lon < -150, lon + 50, lon),
    lat = ifelse(lon > -160 & lon < -150, lat - 1, lat)
  )
第三步:绘制气泡图

现在把调整后的地图和气泡叠加起来,设置好大小、颜色映射,再优化一下视觉效果:

ggplot() +
  # 先画美国州的底图,填充浅灰色,边框深灰色
  geom_polygon(data = us_states_adj, aes(x = long, y = lat, group = group),
               fill = "#f0f0f0", color = "#333333", linewidth = 0.3) +
  # 叠加气泡:size绑定amount,color绑定score,加一点透明度避免重叠遮挡
  geom_point(data = zip_data_adj, aes(x = lon, y = lat, size = amount, color = score),
             alpha = 0.7) +
  # 调整气泡的大小范围,避免太大或太小(可以根据你的数据调整数值)
  scale_size_continuous(range = c(1, 10)) +
  # 用viridis色系做颜色渐变,比默认颜色更友好(色盲也能识别)
  scale_color_viridis_c(option = "plasma") +
  # 使用墨卡托投影,保持地图形状不会严重变形
  coord_map("mercator") +
  # 去掉坐标轴、网格这些多余元素,让地图更简洁
  theme_void() +
  # 添加标题和图例标签
  labs(title = "美国50州气泡图",
       size = "Amount",
       color = "Score") +
  # 调整标题样式,居中、加粗
  theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"))
关键细节说明
  • 坐标同步:一定要记得同时调整地图和你的数据集坐标,不然气泡和地图会错位!
  • 投影选择:coord_map("mercator")能避免地图拉伸变形,如果你需要其他投影,也可以换成coord_map("albers")之类的。
  • 气泡大小:scale_size_continuous里的range参数可以根据你的amount数据范围调整,确保气泡既不会小到看不见,也不会大到覆盖整个州。
  • 颜色选择:viridis色系是数据可视化里的首选,比默认的彩虹色更专业,也更适合色盲用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:36:09