You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:56:45