PyVista绘制网格时为何出现标量竖线而非连续数据分布?
PyVista绘制温度网格出现不规则竖线,无法实现连续分布
问题代码
import xarray as xr import geovista as gv from geovista.pantry import oisst_avhrr_sst import geovista.theme import numpy as np import pyvista as pv from conversion import to_lonlats def returnClosest(ds,target): differences = np.abs(ds - target) closest_index = differences.argmin() closest_element = ds[closest_index] return closest_element # Load sample data dataset = xr.open_dataset('temp.nc', decode_times=False) # print(dataset) # Extract coordinates and variable values x = dataset['LON1_4501'].values y = dataset['LAT'].values lon,lat=np.meshgrid(x,y) z = dataset['WATER_TEMP'].values[0, 0, :, :] mesh=pv.StructuredGrid(lon,lat,z) plotter=pv.Plotter() plotter.add_mesh(mesh,scalars=z) plotter.show()
问题现象
运行上述代码后,温度网格绘图形态怪异不规则,放大后标量分布呈现竖线状,无法得到连续的分布效果,且更换其他数据集按相同方式绘图时,问题依旧存在。
绘图效果展示:
放大后的绘图效果:
数据集地址:https://github.com/rajivjha0599/cdf/blob/main/time_series.nc
解决方案
1. 检查维度匹配关系
先打印数据集维度信息,确认温度数据与经纬度的维度对应关系,避免meshgrid顺序错误:
print(dataset.dims) print(dataset['WATER_TEMP'].shape) print(dataset['LON1_4501'].shape, dataset['LAT'].shape)
如果经纬度维度与温度数据的行列顺序不匹配,直接调整meshgrid的输入顺序即可。
2. 修正网格创建逻辑
无需手动用meshgrid生成网格,直接用数据集原生坐标创建StructuredGrid,避免维度反转问题:
z = dataset['WATER_TEMP'].values[0, 0, :, :] # 直接传入原坐标数组,PyVista会自动匹配维度 mesh = pv.StructuredGrid(dataset['LON1_4501'].values, dataset['LAT'].values, z)
如果网格存在无效点,可执行清理操作:
mesh = mesh.clean()
3. 优化渲染效果
启用平滑着色让分布更连续:
plotter.add_mesh(mesh, scalars=z, smooth_shading=True)
若数据本身离散性强,可对网格做平滑处理:
smoothed_mesh = mesh.smooth(n_iter=100) plotter.add_mesh(smoothed_mesh, scalars=z)
4. 处理缺失值
检查并填充数据中的NaN值(缺失值会导致网格断裂):
print(np.isnan(z).sum()) # 用均值填充缺失值 z = np.nan_to_num(z, nan=np.nanmean(z))
内容的提问来源于stack exchange,提问作者rajiv
相关产品推荐
相关产品推荐

