如何处理 flag/exception 值

How to handle flag/exception values

在 Paraview 中,我正在处理一个使用值 -99999 作为标志值的数据集。我希望能够在没有这些值的情况下操作数据集,从而导致字形和颜色条等问题。名义上,我希望数据为 "ignored"。

关于数据的一些信息:我有标量和矢量点数据,它们以设定的时间间隔位于固定的 2D 空间网格上。

尽管 -99999 远远超出了数据可能显示的值,但使用阈值过滤器不是一种选择,因为该标志可能会在不同时间出现在不同位置。 Paraview 的阈值过滤器的工作方式意味着 space 中固定点的点 ID 将随着过滤点数随时间的变化而变化。

万一重要,数据位于通过 XMF 头文件和 XDMF Reader 读取的 netCDF 文件中,因为 CF reader 不起作用(可能是因为我非结构化三角网格)。 netCDF 数据具有 _FillValue 全局属性,但是 Paraview 似乎没有注意到这一点。

您可以使用 Programmable Filter 将低于 -99999 的值替换为 NaN。如果数据不是 vtkMultiblockDataSet,您可以在可编程过滤器中使用以下脚本:

import numpy as np
from vtk.numpy_interface import dataset_adapter as dsa

# name of the array
name = 'name'
# limit
limit = -99999

array = inputs[0].PointData[name].copy()
array[array<=limit] = np.nan
out = dsa.WrapDataObject(self.GetOutput())
out.PointData.append(array, name)

注意:如果感兴趣的数据是单元格数据,请在脚本中将 PointData 替换为 CellData

注2:脚本在ParaView 5.6上测试过。