如何在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
相关产品推荐
相关产品推荐

