使用Terra绘制NetCDF文件报错:invalid type passed to graphics function
解决terra包绘制OMI NetCDF数据时的
plot.xy错误 问题背景
导入OMI仪器的Level 3 NetCDF文件后,terra::rast()能正常读取数据并返回结构正确的SpatRaster对象,但调用plot(r1)时抛出以下错误:
Error in plot.xy(xy, type, ...) : invalid type passed to graphics function
读取数据的代码:
path = "OMI-Aura_L3-OMI_MINDS_NO2d_2016m0101_v01-01-2022m0218t115312.nc" r1 <- terra::rast(path, subds = "ColumnAmountNO2") plot(r1)
r1的输出信息确认对象结构正常:
> r1 class : SpatRaster dimensions : 720, 1440, 1 (nrow, ncol, nlyr) resolution : 0.25, 0.25 (x, y) extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax) coord. ref. : +proj=longlat +a=6378137 +rf=298.25723 +no_defs source : OMI-Aura_L3-OMI_MINDS_NO2d_2016m0101_v01-01-2022m0218t115312.nc:ColumnAmountNO2 varname : ColumnAmountNO2 (NO2 Vertical Column Density) name : ColumnAmountNO2_Time=16071.5 unit : molec/cm2
解决方法
1. 显式调用terra的绘图函数
避免依赖S3方法的隐式调用,直接使用terra::plot()确保适配SpatRaster对象:
terra::plot(r1)
2. 转换数据类型并处理异常值
NetCDF中的变量可能存储为非数值型(如integer64)或包含无效值,导致绘图函数报错:
# 转换为数值型 r1 <- terra::app(r1, as.numeric) # 过滤超出合理范围的NO2柱浓度值(根据实际数据调整阈值) r1[r1 < 0 | r1 > 1e17] <- NA # 重新绘图 terra::plot(r1)
3. 更新terra包到最新版本
旧版本terra对某些NetCDF格式的兼容性较差,更新后可修复潜在bug:
install.packages("terra") library(terra) # 重新读取并绘图 r1 <- terra::rast(path, subds = "ColumnAmountNO2") terra::plot(r1)
内容的提问来源于stack exchange,提问作者Priya Patel
相关产品推荐
相关产品推荐

