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

如何在rasterVis的vectorplot中隐藏陆地区域0值的矢量箭头

解决rasterVis::vectorplot不绘制0值矢量的问题

问题描述

使用rasterVis包的vectorplot绘制关岛洋流场图时,读取陆地区域为NA的原始数据会报错,改用陆地区域流速为0的文件后,绘图时陆地区域却显示矢量箭头,需要设置让plot不绘制值为0的矢量。

相关代码

原始数据读取

ncfile_org <- 'guaROMS_2021Apr25May21_nan.nc' 

ucomp <- brick(ncfile_org, varname='u')
vcomp <- brick(ncfile_org, varname='v')

指定绘图日期并处理NA值

d=181

ucomp1 <- ucomp[[d]]
vcomp1 <- vcomp[[d]]
ucomp1[is.na(ucomp1[])]=0
vcomp1[is.na(vcomp1[])]=0

uv=stack(ucomp1,vcomp1)

绘制矢量图

vectorplot(uv,isField="dXY",region=TRUE, 
       par.setting=viridisTheme(region=c("#FFFFFFFF",viridis(10))))

解决方法

核心思路是把陆地区域的0值重新转为NA,vectorplot默认会忽略NA值对应的矢量(na.rm参数默认是TRUE),这样就能隐藏陆地区域的箭头。

方案1:直接将0值转回NA(适用于无海域0值的情况)

修改数据处理代码:

d=181

ucomp1 <- ucomp[[d]]
vcomp1 <- vcomp[[d]]
# 将之前转成0的陆地值重新转回NA
ucomp1[ucomp1[] == 0] <- NA
vcomp1[vcomp1[] == 0] <- NA

uv=stack(ucomp1,vcomp1)

方案2:基于原始掩码保留海域0值(适用于存在真实流速为0的海域)

如果担心原始数据里有海域的0值(非陆地),可以先保留原始的陆地NA掩码,只把陆地的0转回NA:

d=181

# 先保存原始的陆地NA掩码
land_mask <- is.na(ucomp[[d]])

ucomp1 <- ucomp[[d]]
vcomp1 <- vcomp[[d]]
# 仅将陆地区域的0转回NA,保留海域的0
ucomp1[land_mask] <- NA
vcomp1[land_mask] <- NA

uv=stack(ucomp1,vcomp1)

修改后重新运行绘图代码,陆地区域的矢量箭头就不会被绘制了。

内容的提问来源于stack exchange,提问作者Heidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:36:22