如何用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
相关产品推荐
相关产品推荐

