tmap中MAP_COLORS参数无法为相邻多边形分配不同颜色的问题
问题原因与解决方案
为什么MAP_COLORS默认会出现相邻区域同色?
tmap中MAP_COLORS调用的默认分类填充调色板是RColorBrewer的"Pastel1",这个调色板仅包含9种颜色。当数据集(比如捷克的二级行政单位数量远超过9)的多边形数量超过调色板颜色总数时,颜色会循环分配,导致相邻区域很容易拿到重复的浅粉色。
如何定位默认调色板?
可以通过以下代码查看tmap的默认调色板设置:
# 查看tmap默认的填充调色板 getOption("tmap.default")$aes.palette$fill
运行后会返回"Pastel1",这就是问题的根源。
解决方法
1. 直接指定支持动态生成颜色的调色板
使用HCL色系的调色板(如hcl.pastel1、hcl.tol等),这类调色板可以根据数据集的多边形数量自动生成足够多的独特颜色,不会循环重复:
library(tmap) library(sf) test <- read_sf(<PATH_TO_UN_SHAPEFILE>) tmap_shape(test[test$iso3_code == "CZE",]) + tm_polygons(fill = "MAP_COLORS", tm_scale(values = "hcl.pastel1"))
2. 自定义匹配数量的独特颜色
如果需要更个性化的颜色,可使用colorspace包生成与多边形数量完全匹配的定性颜色:
library(tmap) library(sf) library(colorspace) test_cze <- test[test$iso3_code == "CZE",] # 生成对应数量的独特颜色 custom_cols <- qualitative_hcl(nrow(test_cze), palette = "pastel1") tmap_shape(test_cze) + tm_polygons(fill = "MAP_COLORS", tm_scale(values = custom_cols))
3. 修改tmap全局默认调色板
如果不想每次都手动指定调色板,可以修改tmap的全局设置,将默认填充调色板替换为支持动态生成的类型:
library(tmap) library(sf) # 全局设置默认填充调色板为hcl.pastel1 tmap_options(aes.palette = list(fill = "hcl.pastel1")) test <- read_sf(<PATH_TO_UN_SHAPEFILE>) tmap_shape(test[test$iso3_code == "CZE",]) + tm_polygons(fill = "MAP_COLORS")
内容的提问来源于stack exchange,提问作者BLP92
相关产品推荐
相关产品推荐

