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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:31:12