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

