如何在usmap中用n_votes数字替代州名做地图标注?
实现美国地图标注选举人票数(n_votes)的方法
嘿,这个需求其实很好解决!usmap包确实内置了各州(包括DC)的质心坐标数据,我们可以直接提取出来和你的数据关联,再用geom_text()完成标注。下面是具体的步骤和代码:
步骤1:提取usmap内置的质心坐标
usmap包提供了一个专门的数据集usmap::centroid_labels,里面包含了每个州的FIPS编码、质心的x/y坐标,刚好可以和你的数据通过fips字段匹配。
步骤2:合并你的数据与质心坐标
用dplyr的left_join函数把你的投票数据和质心数据合并,确保每个州的n_votes都对应上正确的坐标:
# 加载需要的包 library(usmap) library(ggplot2) library(dplyr) # 假设你的数据框名为vote_data # 合并数据(如果你的fips是带前导零的字符型,确保两边类型一致) merged_data <- left_join(vote_data, centroid_labels, by = "fips")
步骤3:绘制带票数标注的美国地图
先用plot_usmap()绘制基础地图(可以根据你的Attitude字段设置填充色),然后叠加geom_text()来标注n_votes:
plot_usmap(data = vote_data, values = "Attitude", color = "black") + # 添加票数标注,适配地图投影的坐标 geom_text(data = merged_data, aes(x = x, y = y, label = n_votes), color = "white", size = 3, fontface = "bold") + # 可选:添加配色方案和图例优化 scale_fill_viridis_d(option = "plasma", name = "State Attitude") + theme(legend.position = "right")
关键说明
centroid_labels里的x/y坐标已经适配了usmap的投影规则,不需要额外转换;- 可以调整
geom_text()的参数,比如color(文字颜色)、size(文字大小)、fontface(字体样式)来优化显示效果; - 如果你的数据里的fips是字符型(比如带前导零的"01"),要确保
centroid_labels的fips也是字符型,避免匹配失败(可以用as.character()统一转换)。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

