使用tmap绘制地图遇报错:Fill argument neither colors nor valid variable name(s)
解决tmap报错:Error: Fill argument neither colors nor valid variable name(s)
这个报错本质是tmap没法识别你指定的填充参数——要么是你写的变量名不对,要么这个变量不符合填充要求。我给你几个实用的排查和解决步骤:
1. 先确认变量真的在你的空间数据里
首先得搞清楚zeta.x是不是myshptime1属性表里的有效列名,别是手滑拼错了。运行下面的代码列出来所有属性列:
# 如果你用的是sf格式的空间数据 names(myshptime1) # 要是用的是老版本的sp格式 names(myshptime1@data)
仔细核对输出的列名,有没有大小写错误、多打了符号?比如把zeta.x写成zeta_x或者Zeta.x都会找不到变量。
2. 检查变量的数据类型对不对
tmap的tm_polygons要求填充变量是数值型(不管连续还是离散),如果zeta.x是字符型或者格式异常的因子,就会触发这个报错。你可以先查下变量类型:
# sf对象的写法 class(myshptime1$zeta.x) # sp对象的写法 class(myshptime1@data$zeta.x)
如果是字符型,先把它转成数值型(前提是变量里的内容都是可转换的数字):
myshptime1$zeta.x <- as.numeric(myshptime1$zeta.x)
3. 试试换个变量名(避开特殊字符)
有些旧版本的tmap对变量名里的点号支持不太友好,你可以把变量名改成下划线试试:
# 重命名变量 names(myshptime1)[names(myshptime1) == "zeta.x"] <- "zeta_x" # 然后修改你的绘图代码 tm1 <- tm_shape(myshptime1) + tm_polygons("zeta_x", style="pretty", palette="PuOr", title="Spatial Residual \n Relative Risk ") + tm_layout(frame = FALSE) tm1
4. 用最简代码排查干扰
先把代码简化到最基础的形式,排除其他参数的影响:
tm_test <- tm_shape(myshptime1) + tm_polygons("zeta.x") tm_test
如果这个最简版本能正常运行,再逐步加回style、palette这些参数,就能定位是不是某个参数组合出了问题。
另外提一句,你的原始代码里tm1的定义和调用连在一起了,最好加个换行或者分号,虽然这不是报错的直接原因,但规范代码更容易排查问题~
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

