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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:50:01