绘制字形(矢量或多边形数据)#

使用数据集中的矢量来绘制和定向字形/几何对象。

import numpy as np

# sphinx_gallery_thumbnail_number = 4
import pyvista as pv
from pyvista import examples

字形绘制可以通过 pyvista.DataSetFilters.glyph() 过滤器完成

mesh = examples.download_carotid().threshold(145, scalars="scalars")
mask = mesh["scalars"] < 210
mesh["scalars"][mask] = 0  # null out smaller vectors

# Make a geometric object to use as the glyph
geom = pv.Arrow()  # This could be any dataset

# Perform the glyph
glyphs = mesh.glyph(orient="vectors", scale="scalars", factor=0.003, geom=geom)

# plot using the plotting class
pl = pv.Plotter()
pl.add_mesh(glyphs, show_scalar_bar=False, lighting=False, cmap="coolwarm")
pl.camera_position = [
    (146.53, 91.28, 21.70),
    (125.00, 94.45, 19.81),
    (-0.086, 0.007, 0.996),
]  # view only part of the vector field
cpos = pl.show(return_cpos=True)
plot glyphs

另一种方法是将矢量直接加载到网格对象中,然后访问 pyvista.DataSet.arrows 属性。

sphere = pv.Sphere(radius=3.14)

# make cool swirly pattern
vectors = np.vstack(
    (
        np.sin(sphere.points[:, 0]),
        np.cos(sphere.points[:, 1]),
        np.cos(sphere.points[:, 2]),
    )
).T

# add and scale
sphere["vectors"] = vectors * 0.3
sphere.set_active_vectors("vectors")

# plot just the arrows
sphere.arrows.plot()
plot glyphs

绘制箭头和球体。

p = pv.Plotter()
p.add_mesh(sphere.arrows, lighting=False, scalar_bar_args={"title": "Vector Magnitude"})
p.add_mesh(sphere, color="grey", ambient=0.6, opacity=0.5, show_edges=False)
p.show()
plot glyphs

字形的子集#

有时你可能不希望为输入数据集中的每个节点绘制字形。 在这种情况下,你可以选择使用合并容差为输入数据集的子集构建字形。 在这里,我们指定了 5% 的合并容差,相当于边界框长度的 5%。

# Example dataset with normals
mesh = examples.load_random_hills()

# create a subset of arrows using the glyph filter
arrows = mesh.glyph(scale="Normals", orient="Normals", tolerance=0.05)

p = pv.Plotter()
p.add_mesh(arrows, color="black")
p.add_mesh(mesh, scalars="Elevation", cmap="terrain", smooth_shading=True)
p.show()
plot glyphs

脚本总运行时间:(0 分钟 5.249 秒)

估计内存使用量:524 MB

画廊由 Sphinx-Gallery 生成