PyVista Glyph报错:数组真值模糊,orient无法识别向量数组
解决PyVista中Glyph方向数组触发的真值歧义错误
直接把numpy数组塞给glyph的orient参数会触发这个报错——PyVista内部判断orient是否有效时,会尝试把数组转成布尔值,而多维数组的布尔判断本身就有歧义,所以抛出了真值不明确的错误。正确的做法是先把方向向量存到晶格的点属性里,再通过字段名称来引用。
修复步骤:
- 将自旋向量添加到晶格点数据:在创建
lattice对象后,把归一化后的自旋向量作为点属性存入其中 - 修改Glyph调用:用点属性的字段名指定
orient参数,同时调整缩放参数(如果不需要按向量模长缩放,设scale=False来固定缩放因子) - 修复标题语法错误:给
plotter.show()的title参数传入合法字符串
完整修复代码:
import numpy as np import pyvista as pv cols = 12 rows = 12 spacing = 10.0 points = [] # 创建晶格点 for i in range(rows): for j in range(cols): x = j * spacing y = i * (spacing * np.sqrt(3) / 2) if i % 2 == 1: x += spacing / 2 points.append([x, y, 0.0]) points = np.array(points) spins = np.random.choice([-1, 1], size=(len(points), 3)) normed_spins = spins / np.linalg.norm(spins, axis=1)[:, np.newaxis] lattice = pv.PolyData(points) # 将自旋向量添加为点属性 lattice["spin_orient"] = normed_spins # 通过字段名指定方向,固定缩放因子 arrows = lattice.glyph(orient="spin_orient", scale=False, factor=0.5) print(spins[:5]) plotter = pv.Plotter() plotter.add_mesh(lattice, color="black", point_size=10, render_points_as_spheres=True, label="晶格点") plotter.add_mesh(arrows, color="red", label="自旋向量") plotter.show_bounds(grid="front", location="outer", all_edges=True) plotter.show(title="二维自旋晶格可视化")
内容的提问来源于stack exchange,提问作者Argonaut
相关产品推荐
相关产品推荐

