tmap绘图时图例颜色与地图实际颜色不匹配求助
解决tmap地图与图例颜色不匹配问题
问题核心是你设置的alpha = 0.7仅对地图多边形生效,图例仍使用原始不透明颜色,导致视觉上出现差异。以下是两种直接解决方法:
方法1:手动给自定义灰度调色板添加透明度通道
将灰度颜色转换为带alpha值的十六进制格式(0.7透明度对应的十六进制是B3,由0.7*255≈171转换而来),同时移除tm_polygons中的alpha参数:
tmap::tm_shape(ut_master_T10) + tmap::tm_polygons( col = "t2d.18_64.censusrate.per1k.q5", palette = c("#FFFFFFB3", "#DEDEDEB3", "#BEBEBEB3", "#5F5F5FB3", "#000000B3"), lwd = 0.5, title = "") + tmap::tm_layout( frame = FALSE, legend.outside = TRUE, legend.hist.width = 5, legend.text.size = 0.5, fontfamily = "Verdana") + tmap::tm_scale_bar( position = c("LEFT", "BOTTOM"), breaks = c(0, 10, 20), text.size = 0.5 ) + tmap::tm_compass(position = c("LEFT", "TOP"))
方法2:处理viridis色标的情况
如果使用viridis调色板,需先生成带透明度的颜色序列,替代独立的alpha参数:
# 生成带0.7透明度的viridis颜色序列 viridis_alpha = scales::viridis_pal(alpha = 0.7)(5) tmap::tm_shape(ut_master_T10) + tmap::tm_polygons( col = "t2d.18_64.censusrate.per1k.q5", palette = viridis_alpha, lwd = 0.5, title = "") + tmap::tm_layout( frame = FALSE, legend.outside = TRUE, legend.hist.width = 5, legend.text.size = 0.5, fontfamily = "Verdana") + tmap::tm_scale_bar( position = c("LEFT", "BOTTOM"), breaks = c(0, 10, 20), text.size = 0.5 ) + tmap::tm_compass(position = c("LEFT", "TOP"))
原理:tmap的alpha参数仅控制地图元素透明度,不会同步应用到图例。直接在调色板颜色中嵌入透明度通道,能让地图和图例使用完全一致的颜色。
内容的提问来源于stack exchange,提问作者Meo
相关产品推荐
相关产品推荐

