如何使用ggplot2绘制按销售人员分配填色且带州缩写的美国地图
解决方案
以下是满足需求的完整实现代码及说明:
核心修改点
- 将填充维度从原代码的州名改为销售人员,匹配填色需求
- 新增自定义颜色映射,严格按照要求设置Erin使用
#1A1446、Tim使用#FFD000,其余两位销售的色值可自行调整 - 新增州中心点坐标计算逻辑,实现州名缩写标注
- 优化主题配置,修复原代码的废弃语法警告
完整可运行代码
library(mapdata) library(ggplot2) library(tidyverse) state <- map_data("state") assignments <- tibble::tribble( ~State, ~Abbreviation, ~Salesperson, "alabama", "AL", "Kristen", "alaska", "AK", "Erin", "arizona", "AZ", "Erin", "arkansas", "AR", "Kristen", "california", "CA", "Erin", "colorado", "CO", "Erin", "connecticut", "CT", "Joe", "delaware", "DE", "Joe", "florida", "FL", "Tim", "georgia", "GA", "Tim", "hawaii", "HI", "Erin", "idaho", "ID", "Joe", "illinois", "IL", "Kristen", "indiana", "IN", "Kristen", "iowa", "IA", "Kristen", "kansas", "KS", "Kristen", "kentucky", "KY", "Kristen", "louisiana", "LA", "Kristen", "maine", "ME", "Joe", "maryland", "MD", "Joe", "massachusetts", "MA", "Joe", "michigan", "MI", "Kristen", "minnesota", "MN", "Kristen", "mississippi", "MS", "Kristen", "missouri", "MO", "Kristen", "montana", "MT", "Erin", "nebraska", "NE", "Kristen", "nevada", "NV", "Erin", "new hampshire", "NH", "Joe", "new jersey", "NJ", "Joe", "new mexico", "NM", "Erin", "new york", "NY", "Joe", "north carolina", "NC", "Tim", "north dakota", "ND", "Kristen", "ohio", "OH", "Kristen", "oklahoma", "OK", "Kristen", "oregon", "OR", "Joe", "pennsylvania", "PA", "Joe", "rhode island", "RI", "Joe", "south carolina", "SC", "Tim", "south dakota", "SD", "Kristen", "tennessee", "TN", "Kristen", "texas", "TX", "Kristen", "utah", "UT", "Joe", "vermont", "VT", "Joe", "virginia", "VA", "Tim", "washington", "WA", "Joe", "west virginia", "WV", "Kristen", "wisconsin", "WI", "Kristen", "wyoming", "WY", "Erin", "district of columbia", "DC", "Joe" ) # 关联销售人员分配表与地图数据 state_join <- state %>% left_join(assignments, by = c("region" = "State")) # 计算每个州的中心点坐标,用于标注州缩写 state_centers <- state_join %>% group_by(Abbreviation) %>% summarise( long = median(long), lat = median(lat), .groups = "drop" ) # 绘制最终地图 ggplot() + geom_polygon(data = state_join, aes(x = long, y = lat, group = group, fill = Salesperson), color = "white") + geom_text(data = state_centers, aes(x = long, y = lat, label = Abbreviation), color = "white", size = 3) + scale_fill_manual(values = c( "Erin" = "#1A1446", "Tim" = "#FFD000", "Kristen" = "#2E8B57", "Joe" = "#1E90FF" )) + theme_void() + ggtitle("美国各州销售人员负责区域分布") + coord_fixed(1.3)
调整说明
- 若不需要显示销售人员图例,可在
scale_fill_manual中添加参数guide = "none" - 州名缩写的颜色、大小可通过修改
geom_text的color和size参数调整 - Kristen和Joe的色值可根据实际需求替换
scale_fill_manual中对应的值即可
内容的提问来源于stack exchange,提问作者Jazzmatazz
相关产品推荐
相关产品推荐

