我想使用 mayavi 在 Jupyter notebook 中显示几个 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, 0.866667 0.945098 0.603922, 0.866667 0.945098 0.603922, 0.847059 0.937255 0.607843, 0.847059 0.937255 0.607843, 0.847059 0.937255 0.607843, 0.847059 0.937255 0.607843, 0.847059 0.937255 0.607843, 0.8470590.937255 0.607843, 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中使用更复杂的方法(例如手动构建管道)的解决方案也是受欢迎的。谢谢!
在创建新图形之前,可以使用函数mayavi.mlab.clf
清除图形。此功能的文档在那里.
我相信在每个新图形之前使用此函数是有意义的,即使它是第一个数字,例如:
# first cell
from mayavi import mlab
mlab.init_notebook('x3d')
# second cell
mlab.clf()
mlab.test_plot3d()
# third cell
mlab.clf()
mlab.test_points3d()