R语言qmplot绘制带双图例的阿拉巴马选举地图问题
解决阿拉巴马州2017参议院选举地图双图例问题
问题核心
现有代码可正确绘制县级着色地图,但添加双图例时出现两个问题:
- Jones(蓝色区间)与Moore(红色区间)的颜色顺序反转
- Moore的最高红色区间(80-90)缺失
关键修正思路
- 确保颜色向量与区间顺序严格匹配:浅色调对应低得票区间,深色调对应高得票区间
- 颜色向量长度必须与区间数量一致(5个区间对应5种颜色)
- 分别绘制两个独立图例,避免重叠
修正后的完整代码
# 加载依赖包 library(maptools) library(RColorBrewer) # 读取地图与选举数据 alabama <- readShapePoly("alabama_counties.shp") election_data <- read.csv("alabama_senate_2017.csv") alabama@data <- merge(alabama@data, election_data, by = "COUNTY") # 定义得票率区间(5个区间) bin_breaks <- c(40, 50, 60, 70, 80, 90) bin_labels <- c("40-50", "50-60", "60-70", "70-80", "80-90") # 生成候选人得票区间分组 alabama@data$jones_bin <- cut(alabama@data$JONES, breaks = bin_breaks, include.lowest = TRUE, labels = bin_labels) alabama@data$moore_bin <- cut(alabama@data$MOORE, breaks = bin_breaks, include.lowest = TRUE, labels = bin_labels) # 定义颜色:蓝色系对应Jones,红色系对应Moore(5种颜色,与区间数量匹配) jones_colors <- brewer.pal(5, "Blues") moore_colors <- brewer.pal(5, "Reds") # 绘制正确着色的地图(以Jones得票率为例,若需Moore着色替换jones_colors为moore_colors) plot(alabama, col = jones_colors[alabama@data$jones_bin], border = "white", main = "2017阿拉巴马州参议院选举结果") # 添加修正后的双图例 # Jones图例(左下,蓝色从浅到深对应区间从小到大) legend("bottomleft", legend = bin_labels, fill = jones_colors, title = "*Jones (Blue)*", cex = 0.8, bty = "n") # Moore图例(右下,红色从浅到深对应区间从小到大) legend("bottomright", legend = bin_labels, fill = moore_colors, title = "*Moore (Red)*", cex = 0.8, bty = "n")
修正点说明
- 移除了原代码中的
rev()函数,避免颜色顺序反转 - 用
brewer.pal(5, "Reds")生成完整的5种红色调,确保最高区间有对应颜色 - 用
bty = "n"去掉图例边框,优化视觉效果 - 用
cex = 0.8调整图例大小,防止两个图例重叠
内容的提问来源于stack exchange,提问作者data_life
相关产品推荐
相关产品推荐

