如何用R的tidyterra按分位数色彩可视化连续栅格数据
使用tidyterra实现栅格列的分位数分类可视化及NA处理
问题1:按图层自身分位数(5类)设置色彩
通过scale_fill_binned()结合自定义断点函数,可让每个分面(图层)单独计算自身的5分位数作为分类边界:
- 用
breaks = function(x) quantile(x, na.rm = TRUE, probs = seq(0, 1, 0.2))指定断点逻辑,probs = seq(0,1,0.2)对应5分位数(0%、20%、40%、60%、80%、100%)。 - 搭配调色板参数(如
palette = "viridis")提升色彩区分度。
问题2:处理栅格中的NA数据
在填充刻度中通过na.value参数指定NA值的显示颜色,比如浅灰色或透明色。
完整代码
library(terra) library(tidyterra) library(ggplot2) # 读取栅格文件 tif <- list.files(path = "/Users/Aa/Desktop/HR", pattern = '*.tif', full.names = TRUE, recursive = TRUE) HR <- rast(tif) names(HR) <- as.character(2012:2017) # 可视化:分位数分类+NA处理 ggplot() + geom_spatraster(data = HR) + scale_fill_binned( # 按每个图层的5分位数生成断点 breaks = function(x) quantile(x, na.rm = TRUE, probs = seq(0, 1, 0.2)), # 选择调色板 palette = "viridis", # 设置NA值显示颜色 na.value = "lightgray", # 图例标题 name = "栅格数值" ) + facet_wrap(~lyr, ncol = 2) + theme_minimal() + labs(title = "2012-2017年栅格数据分位数分类展示")
补充说明
- 如果需要自定义分类标签,可先用
classInt::classIntervals()计算每个图层的断点,再手动传递给breaks参数。 na.value支持任意颜色代码,比如"#FFFFFF"(白色)或"transparent"(透明)。
内容的提问来源于stack exchange,提问作者Wei Liao
相关产品推荐
相关产品推荐

