使用R的map包绘地图时编写if-then语句匹配点颜色与大洲的方法
解决方案
你可以通过两种方式实现颜色和大洲的绑定,第一种是更易维护的命名映射方法,第二种是你需要的if-then逻辑的矢量化实现:
前提说明
假设你的allcrd数据集里存储大洲信息的列名为continent,如果你的实际列名不同,替换代码中对应的列名即可。
方法1:命名向量映射(更推荐)
不需要写冗余判断语句,直接通过键值对匹配颜色,后续修改配色也更方便:
# 定义大洲-颜色映射关系 color_map <- c( "非洲" = "yellow", "美洲" = "darkblue", "亚洲" = "green", "欧洲" = "lightblue", "大洋洲" = "purple" ) # 匹配每个点的颜色 point_colors <- color_map[allcrd$continent] # 绘图的points语句修改为 points(x=allcrd$longitude, y=allcrd$latitude, col=point_colors, cex=.5, pch=16)
方法2:嵌套ifelse实现if-then逻辑
如果你需要明确用判断逻辑实现,可以用R的矢量化ifelse函数嵌套:
# 按规则匹配每个点的颜色,未匹配到的大洲默认显示灰色 point_colors <- ifelse(allcrd$continent == "非洲", "yellow", ifelse(allcrd$continent == "美洲", "darkblue", ifelse(allcrd$continent == "亚洲", "green", ifelse(allcrd$continent == "欧洲", "lightblue", ifelse(allcrd$continent == "大洋洲", "purple", "gray") )))) # 绘图的points语句修改为 points(x=allcrd$longitude, y=allcrd$latitude, col=point_colors, cex=.5, pch=16)
注意事项
- 确保大洲列的取值和映射/判断里的文字完全一致,没有多余空格、大小写差异,否则会匹配失败
- 如果你的数据集里大洲是英文命名,把映射/判断里的中文大洲名替换为对应的英文即可
内容的提问来源于stack exchange,提问作者Skylar Gay
相关产品推荐
相关产品推荐

