在Jupyter笔记本中显示mayavi X3D在不同单元格中的数字

时间:2017-03-23 19:01:43

标签: python jupyter-notebook mayavi

我想用mayavi在Jupyter笔记本中显示几个3D图形。为了测试它,我尝试了以下只有3个单元格的示例:

# first cell
from mayavi import mlab
mlab.init_notebook('x3d')

# second cell
mlab.test_plot3d()

# third cell
mlab.test_points3d()

我在玩这个例子时注意到了几个问题:

a)当我第一次运行这些单元格时,第二次输出是好的,而第三次输出显示两个3D数字的重叠。在我反复多次运行第二个和第三个单元格之后,在某个时间,输出只是崩溃并显示如下内容:

7 0.945098 0.603922,\ n 0.866667 0.945098 0.603922,\ n 0.866667 0.945098 0.603922,\ n 0.847059 0.937255 0.607843,\ n 0.847059 0.937255 0.607843,\ n 0.847059 0.937255 0.607843,\ n 0.847059 0.937255 0.607843,\ n 0.847059 0.937255 0.607843,\ n \ n 0.847059 0.937255 0.607843 n 0.847059 0.937255 0.607843,\ n 0.819608 0.929412 ...

以及以下错误消息:

Javascript error adding output!

SyntaxError: Invalid or unexpected token

See your browser Javascript console for more details.

b)我尝试通过将 mlab.figure()添加到第二个和第三个单元格的开头来修复重叠问题:

# second cell
mlab.figure()
mlab.test_plot3d()

# third cell
mlab.figure()
mlab.test_points3d()
当我第一次运行这些细胞时,确实给了我单独的数字。但是,当我想重复单元格时,我遇到了如上所示的相同问题。

c)为了比较,我删除第三个单元格,然后保留第二个单元格。这次,如果我对第二个单元格使用以下代码

# second cell
mlab.test_plot3d()

它永远不会出现这种崩溃问题。但是,如果我将 mlab.figure()添加到其中,重复运行它会给我带来同样的问题。

所以我的问题是:有没有办法在Jupyter笔记本中获得更强大的mayavi输出,即重新生成对象并在每次再次运行单元格时显示它?我仍然是mayavi的新手,所以任何基于 mlab 的解决方案都非常感谢。但是,如果这是不可能的,那么在mayavi中使用更复杂方法的解决方案(如手动构建管道)也受到欢迎。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在创建新图形之前使用功能mayavi.mlab.clf来清除图形。该函数的文档为there

我认为在每个新图形之前都使用此功能是有意义的,即使它是第一个图形,例如:

# first cell
from mayavi import mlab
mlab.init_notebook('x3d')

# second cell
mlab.clf()
mlab.test_plot3d()

# third cell
mlab.clf()
mlab.test_points3d()