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

如何用tmap包显示栅格像元值?

问题描述

如何用tmap包实现terra包中以下代码的效果(绘制栅格并显示每个像元的值)?

library(terra)
pai_sim <- rast(ncols=6, nrows=6, 
                xmin=1, xmax=60, 
                ymin=1, ymax=60, 
                res=10) 
values(pai_sim) <- 1 
plot(pai_sim) 
text(pai_sim)

我尝试了以下tmap代码,但出现维度错误、找不到对象的报错,且希望作为教学案例尽量避免额外步骤(如实时转换为多边形):

library(tmap)
tm_shape(pai_sim) +
tm_raster() + 
  tm_text("lyr.1")

tm_shape(pai_sim) +
tm_raster() + 
  tm_text(lyr.1)
解决方案

方法1:利用tm_raster自带的文本显示参数

tmap的tm_raster函数内置了text.show参数,可直接开启像元值显示,无需额外转换操作,代码如下:

library(tmap)
library(terra)

# 创建栅格(与原代码一致)
pai_sim <- rast(ncols=6, nrows=6, 
                xmin=1, xmax=60, 
                ymin=1, ymax=60, 
                res=10) 
values(pai_sim) <- 1 

# tmap绘图并显示像元值
tm_shape(pai_sim) +
  tm_raster(text.show = TRUE,  # 开启文本显示
            text.size = 1,     # 设置文本大小
            text.col = "black") # 设置文本颜色

方法2:结合tm_text与栅格中心坐标(无需转矢量)

如果需要更灵活控制文本位置,可提取栅格的中心坐标和值,配合tm_text使用:

# 提取栅格中心坐标和值
cell_centers <- xyFromCell(pai_sim, 1:ncell(pai_sim))
cell_values <- values(pai_sim)

tm_shape(pai_sim) +
  tm_raster() +
  tm_text(text = cell_values, 
          x = cell_centers[,1], 
          y = cell_centers[,2],
          size = 1)

报错原因说明

你之前的代码报错是因为tm_text默认需要读取矢量数据的属性列,而terra的栅格对象并非矢量数据,不存在名为lyr.1的属性列,因此会出现"找不到对象"的错误。

内容的提问来源于stack exchange,提问作者doon75

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:15:33