PyVista多窗口绘制3D体数据切片时出现色阶共享异常问题
问题原因
PyVista 同一 Plotter 实例默认全局共享标量色阶范围,当多个子图的网格值值域差异较大时,值域较小的子图会因为色阶范围被拉大出现显示异常。
解决方案
调用 add_mesh() 方法时,单独为每个网格指定 clim 参数为当前网格的标量值域即可,需要单独显示每个子图的色条时可搭配 scalar_bar_args 参数配置。
修改后的可运行代码如下:
import numpy as np import pyvista as pv Nx, Ny, Nz = 100, 100, 200 plotter = pv.Plotter(shape=(1,2)) plotter.subplot(0,0) vol1 = pv.wrap( np.random.randint(10, size=(Nx,Ny,Nz)) ) slic1 = vol1.slice_orthogonal() # 单独指定当前子图网格的色阶范围 plotter.add_mesh(slic1, clim=[slic1.active_scalars.min(), slic1.active_scalars.max()]) plotter.subplot(0,1) vol2 = pv.wrap( np.random.randint(100, size=(Nx,Ny,Nz)) ) slic2 = vol2.slice_orthogonal() # 单独指定当前子图网格的色阶范围 plotter.add_mesh(slic2, clim=[slic2.active_scalars.min(), slic2.active_scalars.max()]) plotter.show()
如果需要每个子图单独展示色条,可在add_mesh参数中添加scalar_bar_args配置,示例:plotter.add_mesh(slic1, clim=[slic1.active_scalars.min(), slic1.active_scalars.max()], scalar_bar_args={'title': '子图1数值'})
内容的提问来源于stack exchange,提问作者Alf
相关产品推荐
相关产品推荐

