R语言USmap地图优化:州缩写适配与文本轮廓技术问询
解决usmap绘制美国用户热力图的两个标注问题
问题1:小州缩写适配与标注引线
针对东北部小州(VA、MT、CT、NJ等)标注超出边界的问题,提供两种实用方案:
方案1:针对性缩小小州字体
给小州单独设置更小字号,避免标注溢出:
# 为指定小州设置专属字号,其余州用默认值 state_labels$text_size <- ifelse(state_labels$stateabbr %in% c("VA", "MT", "CT", "NJ"), 2.5, 3.5)
修改标注代码,引用自定义字号并隐藏无关图例:
geom_text(data = state_labels, aes(x = x, y = y, label = stateabbr, size = text_size), color = "white") + guides(size = "none") # 隐藏字号对应的图例
方案2:自动添加标注引线(推荐)
使用ggrepel包的geom_text_repel自动调整标注位置并生成引线,彻底解决边界溢出和重叠问题:
# 先安装并加载包 install.packages("ggrepel") library(ggrepel) # 替换原geom_text为带引线的标注 geom_text_repel(data = state_labels, aes(x = x, y = y, label = stateabbr), color = "white", size = 3.5, min.segment.length = 0.1)
min.segment.length参数控制引线触发的最小距离,设为0.1可确保小州都生成引线。
问题2:为白色文本添加轮廓
使用shadowtext包的geom_shadowtext给白色文本添加黑色轮廓,解决浅色背景下文本模糊的问题:
# 先安装并加载包 install.packages("shadowtext") library(shadowtext)
如果用固定位置标注,替换为:
geom_shadowtext(data = state_labels, aes(x = x, y = y, label = stateabbr, size = text_size), color = "white", bg.color = "black", bg.r = 0.1) + guides(size = "none")
如果用引线标注,结合ggrepel的增强版函数(需ggrepel版本足够新):
geom_shadowtext_repel(data = state_labels, aes(x = x, y = y, label = stateabbr), color = "white", bg.color = "black", bg.r = 0.1, size = 3.5, min.segment.length = 0.1)
bg.r参数控制轮廓粗细,0.1是兼顾清晰和美观的常用值。
完整修改代码示例
library(usmap) library(ggplot2) library(RColorBrewer) library(ggrepel) library(shadowtext) # 合并标注坐标与数据 centroid_labels <- usmapdata::centroid_labels("states") state_labels <- merge(statecounts, centroid_labels, by = "fips") # 定义配色方案 myPalette <- colorRampPalette(rev(brewer.pal(11, "RdYlBu"))) # 绘制带优化标注的热力图 usmap3 <- plot_usmap(data = statecounts, regions = "state", values = "n") + geom_shadowtext_repel(data = state_labels, aes(x = x, y = y, label = stateabbr), color = "white", bg.color = "black", bg.r = 0.1, size = 3.5, min.segment.length = 0.1) + scale_fill_gradientn(name = "Count", colours = myPalette(50)) + labs(title = "Frequency of Unique Users in the United States", caption = "", fill = "Count") usmap3
内容的提问来源于stack exchange,提问作者Sabrina M
相关产品推荐
相关产品推荐

