【问题标题】:Mayavi how to show the axes gridMayavi 如何显示轴网格
【发布时间】:2019-07-18 16:49:44
【问题描述】:

在 Mayavi 中,我想在下面的图中看到轴的网格

# Source: <<https://scicomp.stackexchange.com/a/23148/10048>>.
import numpy as np
from mayavi import mlab

# Test data: Matlab `peaks()`
x, y = np.mgrid[-3:3:50j, -3:3:50j]
z = 3*(1 - x)**2 * np.exp(-x**2 - (y + 1)**2) \
   - 10*(x/5 - x**3 - y**5)*np.exp(-x**2 - y**2) \
   - 1./3*np.exp(-(x + 1)**2 - y**2) 

mlab.figure(bgcolor=(1, 1, 1))  # Make background white.
surf = mlab.surf(x, y, z, colormap='RdYlBu', warp_scale=0.3, representation='wireframe', line_width=0.5)
mlab.outline(color=(0, 0, 0))
axes = mlab.axes(color=(0, 0, 0), nb_labels=5)
axes.title_text_property.color = (0.0, 0.0, 0.0)
axes.title_text_property.font_family = 'times'
axes.label_text_property.color = (0.0, 0.0, 0.0)
axes.label_text_property.font_family = 'times'
# mlab.savefig("vector_plot_in_3d.pdf")
mlab.gcf().scene.parallel_projection = True  # Source: <<https://stackoverflow.com/a/32531283/2729627>>.
mlab.orientation_axes()  # Source: <<https://stackoverflow.com/a/26036154/2729627>>.
mlab.show()

就像在 Matlab 中一样

我必须在 Mayavi 中使用哪个命令来实现这一点?

【问题讨论】:

  • 您是否设法创建了这样的轴?如果是,怎么做?
  • @TiagosupportsGoFundMonica 已经有一段时间了,但据我记忆,我放弃了,因为 Mayavi 一直在“抱怨”错误,即使是最简单的任务,比如显示网格。
  • 谢谢。轴很容易显示,但网格......他们的重点更多是显示尽可能多的点
  • 你用别的东西代替@Adriaan 吗?
  • @TiagosupportsGoFundMonica 我仍然“卡在” Matplotlib 中,它具有许多功能,也适用于 3d,并且易于使用,但不幸的是它非常缓慢。这是 Matplotlib 众所周知的缺点。我还没有找到替代方案。

标签: python mayavi mayavi.mlab


【解决方案1】:

我的建议是使用用户定义的过滤器,例如 VTK 中的 CubeAxesActor(这似乎比默认 Mayavi 中的 Axes 过滤器更完整)。在 Mayavi 中会翻译成类似的东西

...
from mayavi import mlab
from tvtk.api import tvtk

...
# Load data
...
mlab.pipeline.user_defined(data, filter=tvtk.CubeAxesActor())
...

但 Mayavi 似乎不喜欢这个过滤器

traits.trait_errors.TraitError: Cannot set the undefined 'input_connection' attribute of a 'CubeAxesActor' object.

我不确定它是否与我的 VTK 版本有关,但您可以尝试

【讨论】:

  • 如何在我的代码示例中使用这个“过滤器”来让网格显示所有三个轴?
  • surf=...之后可以添加mlab.pipeline.user_defined(surf, filter=tvtk.CubeAxesActor())
  • 我在surf 命令后的代码中添加了import tvtkmlab.pipeline.user_defined(surf, filter=tvtk.CubeAxesActor()) 行,但不幸的是得到了错误AttributeError: module 'tvtk' has no attribute 'CubeAxesActor'
  • 您必须将tvtk 导入为from tvtk.api import tvtk
  • 我不幸收到了错误File "...\lib\site-packages\mayavi\filters\filter_base.py", line 73, in update_pipeline fil.update() AttributeError: 'CubeAxesActor' object has no attribute 'update'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多