如何解决raster包颜色条刻度错位问题?含terra包适配方案
解决raster包颜色条刻度错位问题&terra包同款样式实现
一、raster包颜色条刻度错位修复
问题核心
raster包默认将颜色条刻度置于色块中心而非边缘,再加上legend.shrink与legend.width参数搭配不当,容易导致刻度与色块边缘错位。
修复代码
通过调整刻度位置、优化颜色条缩放比例,实现刻度与色块精准对齐:
library(raster) set.seed(123) # 定义颜色调色板 mycolorbar <- colorRampPalette(c( "#fb6203", "#ef9c35", "#f4d095", "#ffffff", "#78c6ec", "#349dfb", "#035ba8" )) # 创建测试栅格 dummy_raster <- raster(matrix(nrow = 10, ncol = 10)) values(dummy_raster) <- runif(100, min = -1, max = 1) # 输出修复后的PDF pdf(file = "mytest_fixed.pdf", width = 5, height = 6) plot(dummy_raster, breaks = seq(-1, 1, 0.1), # 21个断点对应20个色块 col = mycolorbar(20), horizontal = TRUE, legend.width = 1.2, # 拓宽颜色条适配刻度 legend.shrink = 0.9, # 轻微收缩对齐刻度位置 axis.args = list( at = seq(-1, 1, 0.5), # 保留需要显示的关键刻度 tcl = 0.3, pos = 1.05 # 将刻度线移至颜色条正下方 )) dev.off()
如果需要刻度完全对齐色块边缘(而非中心),可将axis.args调整为:
axis.args = list( at = seq(-1, 1, 0.1), # 对应所有色块边缘断点 labels = c("-1", rep("",4), "-0.5", rep("",4), "0", rep("",4), "0.5", rep("",4), "1"), # 仅显示关键刻度标签 tcl = 0.3 )
二、terra包实现同款颜色条样式
terra包作为raster的替代工具,可通过以下参数设置匹配raster的颜色条风格:
library(terra) set.seed(123) mycolorbar <- colorRampPalette(c( "#fb6203", "#ef9c35", "#f4d095", "#ffffff", "#78c6ec", "#349dfb", "#035ba8" )) # 创建SpatRaster对象 dummy_terra <- rast(matrix(nrow = 10, ncol = 10)) values(dummy_terra) <- runif(100, min = -1, max = 1) # 输出PDF pdf(file = "terra_mytest.pdf", width = 5, height = 6) plot(dummy_terra, breaks = seq(-1, 1, 0.1), col = mycolorbar(20), legend = "bottom", # 水平颜色条置于底部 legend.frame = FALSE, # 去掉边框匹配raster默认 legend.width = 1, legend.shrink = 0.9, axis.args = list( at = seq(-1, 1, 0.5), tcl = 0.3 ), plg = list( horizontal = TRUE, x = 0.5, y = 0.1, # 调整颜色条位置 width = 0.8, height = 0.05 # 适配raster的颜色条尺寸 )) dev.off()
内容的提问来源于stack exchange,提问作者Geoffery
相关产品推荐
相关产品推荐

