Note
Click here to download the full example code
Plotting Glyphs (PolyData)¶
Use parameters in a dataset to plot and orient glyphs/geometric objects.
import pyvista as pv
import numpy as np
Table of Glyphs
vtk
supports tables of glyphs from which glyphs are looked
up. This example demonstrates this functionality.
We can allow tables of glyphs in a backward-compatible way by allowing a sequence of geometries as well as single (scalar) geometries to be passed as the geom kwarg of glyph. An indices optional keyword is added, which is mandatory in case geom is a sequence, and in this case has to be the same length.
# get dataset for the glyphs: supertoroids in xy plane
# use N random kinds of toroids over a mesh with 27 points
N = 5
values = np.arange(N) # values for scalars to look up glyphs by
# taken from:
# rng = np.random.default_rng()
# params = rng.uniform(0.5, 2, size=(N, 2)) # (n1, n2) parameters for the toroids
params = np.array([[1.56821334, 0.99649769],
[1.08247844, 1.83758874],
[1.49598881, 0.83495047],
[1.52442129, 0.89600688],
[1.92212387, 0.78096621]])
geoms = [pv.ParametricSuperToroid(n1=n1, n2=n2) for n1, n2 in params]
# get dataset where to put glyphs
x,y,z = np.mgrid[:3, :3, :3]
mesh = pv.StructuredGrid(x, y, z)
# add random scalars
# rng_int = rng.integers(0, N, size=x.size)
rng_int = np.array([4, 1, 2, 0, 4, 0, 1, 4, 3, 1, 1, 3, 3, 4, 3, 4, 4,
3, 3, 2, 2, 1, 1, 1, 2, 0, 3])
mesh.point_arrays['scalars'] = rng_int
# construct the glyphs on top of the mesh; don't scale by scalars now
glyphs = mesh.glyph(geom=geoms, indices=values, scale=False, factor=0.3, rng=(0, N-1))
# create plotter and add our glyphs with some nontrivial lighting
plotter = pv.Plotter()
plotter.add_mesh(glyphs, specular=1, specular_power=15,
smooth_shading=True, show_scalar_bar=False)
plotter.show()

Out:
[(6.244271937741485, 6.244394544495788, 6.244271446003165),
(1.0000000298023224, 1.0001226365566254, 0.999999538064003),
(0.0, 0.0, 1.0)]
Total running time of the script: ( 0 minutes 1.596 seconds)