问题标签 [mayavi.mlab]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
514 浏览

python - 如何将图例添加到 mayavi 图中

我似乎无法让传说出现在 mayavi 情节上。我创建了一个简单的 3d 图,但我需要为该图提供一个图例。Matplotlib 支持通过以下方式添加:

我在 mayavi 中没有找到任何此类传说的工作示例。

0 投票
0 回答
546 浏览

python - Mayavi(python)中对象的旋转

几个问题:我将可用在线脚本的多个部分(主要是 matplotlib 和 mayavi 网站)组合在一起,以创建以下脚本。

如何使用欧拉角或每个球体的四元数相对于另一个旋转一个球体?(我不是指旋转视点,只是旋转整个对象及其颜色图)

或者一般来说,我怎样才能将其中一个球体相对于另一个球体旋转任意角度?

如果我将不透明度设置为 1.0,那么表面上的网格点将是可见的,如何在不损失表面质量的情况下创建不透明对象?另一方面,如果我将不透明度设置为 0.9,我会得到一个非常光滑的表面,但我可以看穿每个球体。我非常感谢您的帮助和反馈。 不透明度 = 1.0

更新1:

我在这里找到了Mayavi: rotate around y axis一种绕一个轴旋转的方法。如何扩展它以在 3D 中旋转对象(球体)?使用欧拉角或四元数。连续使用这种旋转样式来创建类似旋转矩阵 R(x)R(y)R(z) 的东西不起作用,或者至少我不太熟悉它的细节来做到这一点。

顺便说一句,我在哪里可以找到有关此语法“actor.actor”的更多信息?是vtk风格吗?

这是代码:

更新2;可能的解决方案:

我想我找到了一些可行的方法,但我很欣赏直接使用四元数的解决方案。我找不到有关语法“actor”的详细信息,但这是我的解决方案(我们可以通过单独提供旋转角度来旋转所有或每个单独的对象):

0 投票
1 回答
274 浏览

python-3.x - Mayavi:设置 pipeline.tube 半径

我正在使用 Mayavi 绘制一个 3D 网络,

我想改变边缘/管半径。所以我尝试了

我收到一条错误消息,

从错误中,我了解到无法将列表分配给 tube_radius。在这种情况下,我不确定如何为每条边分配不同的半径。

有关如何分配边缘权重/边缘半径的任何建议都会有所帮助。

编辑:完整的工作示例

要在预期输出中添加的新边权重:

0 投票
1 回答
248 浏览

python-3.x - 如何在 Mayavi 中为 3d 图的边缘着色?

我有一个使用 Mayavi 创建的 3d 图,边缘必须用标量值着色。

以下代码创建图表,但我不确定如何为边缘着色

用于为边缘着色的标量值

关于如何做到这一点的任何建议都会非常有帮助。

我还在已创建的 3d 图中看到了另一个问题。其中一条边未连接到节点。

在此处输入图像描述

编辑:据我了解, mlab.pipeline.surface(tube, color=edge_color)
用于为 edge/tube 着色。

更新代码:

但问题是我无法为不同的边缘/管分配不同的颜色

0 投票
0 回答
123 浏览

python - windows 7、python 3.7 (anaconda)、mayavi、vtk:无法导入 mlab

对于我的论文,我试图在 python 3.7 (Anaconda 3) 下启动 Mayavi 并在过去三天内运行。完全没有成功。

打字时:

from mayavi import mlab

蟒蛇告诉我:

一项快速研究表明,来自 vtk 的模块是通过 all.py 加载的,并且所有文件都和平和谐地生活在同一目录 ../Anaconda3/Lib/site-packages/vtkmodules/ 中。

在 all.py 中,触发了一系列导入。在这种情况下 all.py ->.vtkIOExodusPython.py -> vtkIOExodusPython.pyd。

vtkIOExodusPython.pyd 是列表(第 70 行)中触发此错误的第一个文件。但是我找不到任何文件在加载之前的任何区别。

如果我评论该行,下一个错误发生在 .vtkIOMINC,然后是 vtkIONetCDF 和 vtkIOParallel。在这些行前面写一个“#”后,from mayavi import mlab 不再显示任何问题。

在 Windows 中添加了一个 PATH 变量。也是此文件夹的 PYTHONPATH 变量。一点改善都没有。

我将如何让一切正常工作?我究竟做错了什么?

希望你能给我一些建议。

施密特

0 投票
1 回答
240 浏览

python-3.x - 使用 mayavi 绘制 3D 网络时删除节点

我有一个使用 Networkx 创建并使用 Mayavi 绘制的图形网络。

创建图表后,我将删除度数 < 2 的节点,使用G.remove_nodes_from(). 删除节点后,连接到这些节点的边将被删除,但节点仍会出现在最终输出中(下图)。

在此处输入图像描述

我想就如何删除已删除的节点和相应的位置并在输出中显示其余部分提出建议。

其次,我想知道如何以交互方式删除节点和连接到这些节点的边。例如,如果我想删除连接到度数 < 2 的节点的节点和边,首先我想显示一个交互式图形,其中所有度数 < 2 的节点都突出显示。用户可以以交互方式选择需要删除的节点。通过单击突出显示的节点,可以删除节点和连接边。

编辑:我试图通过在上面发布的完整代码中pos包含更新来从数据框中删除已删除节点的位置。pos.drop(pos.index[remove], inplace=True)

但我仍然没有得到正确的输出。

在此处输入图像描述

0 投票
1 回答
180 浏览

python-3.x - 在 Mayavi 中显示多个窗口

我正在尝试在 Mayavi 的单独窗口中绘制多个图形

只有在我关闭第一个图形的窗口后,才会显示第二个窗口。关于如何显示两个窗口的任何建议?

0 投票
0 回答
47 浏览

python-3.x - 如何在 Python 中隐藏 Mayavi 表面后面的线条?

我正在尝试创建一个带有线条和点的球体。但由于我在代码中分别绘制球体、线和点,我认为 Mayavi 没有将其识别为一个整体。所以球体背面的线和点也是可见的。有没有办法让整个场景变得不透明并且一次只显示一个平面?(不透明度仅使单个元素,即球体、线或点不透明;而不是整个图形。)

这就是我现在得到的:

这就是我想要的样子。当我旋转这个球体时,它应该只显示面向我们的表面上的点。

0 投票
2 回答
418 浏览

python - Python mayavi:如何在 3D 空间中的随机位置绘制球体

这是使用 mayavi 生成随机大小球体的代码,

我想让球体通过表面或粘合线相互连接:

  1. 球体必须位于 3D 空间中的随机位置
  2. 球体必须具有相同的半径
0 投票
1 回答
346 浏览

python - 如何在 Python 中使用 Mayavi 在 tvtk 渲染场景上旋转演员?

我玩了一些Mayavi,尤其是玩了一些,tvtk但我很难找到字形以与默认方向不同的方向放置在场景中的示例。

基于这个例子,我用两个圆柱体准备了以下场景,一个红色和一个蓝色,

我在这里想要实现的是改变其中一个的方向。只要我能以某种方式独立旋转字形(而不仅仅是旋转整个场景),要么通过提供旋转矩阵,要么通过调用方法,都无关紧要。

上面的例子呈现

代码示例的渲染输出

关于之前提出的其他问题,这个问题似乎很有用,但不是旋转演员,而是围绕 Y 轴旋转整个场景。scipy-cookbook中也有一个示例,但同样 - 仅具有默认方向。

tvtk 文档中的示例并不丰富,几乎很难相信没有涉及替代方向的示例。该文档仅说明类和方法与遵循某些约定的 C++ 对应项相对应。

  1. tvtk 类名本质上类似于 VTK 类,只是前面没有烦人的“vtk”。唯一的困难是以数字开头的课程。例如,“vtk3DSImporter”变为“3DSImporter”。这在 Python 中是非法的,因此使用的类名是“ThreeDSImporter”。因此,如果第一个字符是数字,则将其替换为等效的非数字字符串。像这样的课程很少,所以这没什么大不了的。
  2. tvtk 方法名称是经过深思熟虑的样式名称,而不是 CamelCase。也就是说,如果一个 VTK 方法被称为 AddItem,则等效的 tvtk 名称是 add_item。这样做是为了与 enthought 包中使用的名称保持一致。
  3. 许多 VTK 方法被方便的属性所取代。在上面的示例中,我们使用了 m.input = cs.output 和 p.representation = 'w' 而不是 m.SetInput(cs.GetOutput()) 和 p.SetRepresentationToWireframe() 等。其中一些属性是真正的特质。
  4. 与 VTK 对象不同,可以在初始化对象时设置 tvtk 对象的属性,方法是在类实例化时将对象的属性(特征)作为关键字参数传递。例如 cs = tvtk.ConeSource(radius=0.1, height=0.5)。

也许在 C++ 中广泛使用 VTK 的人会发现这很有用,但对我来说不是很有帮助。尽管如此,我还是尝试查找 VTK C++ 文档,它确实给了我一些线索。vtkActor确实从vtkProp3DvtkProp继承了一些类型。vtkProp3D似乎确实承认与场景中面向对象相关的方法和属性,但我不清楚如何设置它们。该tvtk库只是 C++ 之上的一个包装器,这使得不可能只inspect接受哪些属性。

我认为为了互联网,也许我们应该准备一个合适的例子来渲染场景,Mayavi并且tvtk承认演员的位置和他们的方向。大多数示例忽略方向并使用球体,因此方向似乎无关紧要。

让我们总结一下。

  1. 如果有人提供指向使用 Mayavi 渲染场景的正确示例的链接,并且tvtk涉及具有不同位置和方向的多个字形,我将接受这样的答案。
  2. 为 (1) 制作一个自定义示例也将被接受。
  3. 也许有人还可以评论一下字形的位置和在场景中映射这个字形的演员之间的差异。正如您在创建时的示例中看到的那样,CylinderSource我明确指定了中心的位置。这很令人困惑,因为它应该是决定场景中字形位置的演员中心。

非常感谢!