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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:15:01