Mayavi: Jupyter notebook 中的场景是交错的

创建于 2016-10-26  ·  10评论  ·  资料来源: enthought/mayavi

当我在带有 x3d 后端的 jupyter 笔记本中绘制一个又一个场景时 - 会发生这种情况:
screen shot 2016-10-26 at 14 29 14

我应该怎么做才能防止这种情况发生? (我假设您在 Out[8] 的网格中心看到来自 Out[2] 的网格)

PS 可能这很重要——我在 VirtualGL 下的远程机器上运行我的 jupyter 笔记本服务器。

最有用的评论

大家好,

很抱歉在这个已关闭的问题中添加内容,但我认为这将是一个向项目提供反馈的好机会。
我刚刚使用 x3d 测试了 jupyter notebook 集成,并在一些小问题后让它工作。
而且我的感觉与@thoth291相同:我希望 mayavi 隐含地为新单元格创建一个新图形。 我想这是我预料到的,因为这是 matplotlib 使用 %matplotlib 内联后端的默认设置。
但是,您也可以反对相反的情况:当使用 %matplotlib 笔记本后端时,必须显式地创建图形(如果没有,则使用先前打开的图形执行绘图操作,这有时会给用户带来令人惊讶的结果)。

回顾一下:不同的 matplotlib 后端在创建新图形方面表现不同。 从用户的角度来看,如果数字与单元格相关联会更容易。 但是,如果遵循 %matplotlib 笔记本建议,则可以遵循以下工作流程:

fig = mlab.figure() # create new figure
s = mlab.test_triangular_mesh() # draw something on it
fig # display figure

这确实有效,所以也许值得用这种工作方式重新格式化示例笔记本,以及记录 jupyter 笔记本的提示和技巧部分 (http://docs.enthought.com/mayavi/mayavi/tips. html).

无论如何,我想补充一点,我认为这个后端的存在很棒。 感谢@prabhuramachandran @GaelVaroquaux的辛勤工作!

最好的祝福,
弗洛里安

所有10条评论

您是否尝试过在新单元格中创建一个新图形?

我在中间做了这个mlab.clf()并且它有所帮助 - 不再有交错。
谢谢@GaelVaroquaux

它是一个错误还是一个功能? 那么我现在应该清除所有脚本中的数字吗?

@thoth291 -- 这与您在没有笔记本时看到的相同。 mlab不会自动清屏,必须自己清屏。 顺便说一句,我很好奇您使用 VirtualGL 的设置。 您使用什么硬件以及如何在远程机器上设置 VirtualGL? 这对其他人也很有用,如果您可以分享详细信息,也许我们可以将其添加到我们的文档中。

我现在关闭这个问题,因为这不是问题,而是 mlab 是如何工作的。

不幸的是,我不是进行设置的人。
我只能说,我们正在使用具有 60 个内核、大量 RAM 和良好 GPU 的 HPC Intel 机器。 我们在那里运行了多个 vnc 服务器。 我们使用tigervnc,然后我们启动了一个服务器,我们用VirtualGL后端设置了它。 当您在 vnc 客户端时 - 您需要使用自定义脚本来运行您的应用程序以拦截 OpenGL 并将其替换为 VirtualGL。 在我的情况下,该脚本称为 vnc3d,我像这样运行它:

vnc3d jupyter notebook

这个设置对我们来说非常有效,唯一令人讨厌的是,每次处理 OpenGL 时,您必须记住将此 vnc3d 脚本添加到您的命令中......

@prabhuramachandran ,我认为这对 Jupyter 用户来说是反直觉的。 或者至少应该明确记录需要这样做( mlab.clf() )以确保正确渲染。 我知道没有一个 3D 引擎(用于 Jupyter)存在这种问题。

@prabhuramachandran ,我认为这对 Jupyter 用户来说是反直觉的。

我也有同样的感觉。

@thoth291 -- 感谢您提供有关 VirtualGL 设置的信息。 这看起来非常有趣和有用。 至于mlab.clf() ,我很高兴记录这一点,尽管我不确定这是令人困惑的行为。 这与使用 mlab 命令然后使用mlab.savefig非常相似。 你会有同样的效果。 也许令人困惑的是,从笔记本使用的角度来看,这是非典型的,用户在一个单元格中执行plt.plot()而不必在下一个单元格之前执行clf() 。 我能做的是在场景转换为 PNG 或 X3D 输出单元后自动调用mlab.clf() ? 那会有帮助吗?

是的,这是令人困惑的部分。 当用户可以定义要做什么时,可能值得为 init_notebook 调用添加一个新参数。 我可以想象,许多 mlab 用户会很好地让数字交错(这样他们就可以逐渐构建一个场景)——但默认行为应该是每个单元格都有独立的数字。

大家好,

很抱歉在这个已关闭的问题中添加内容,但我认为这将是一个向项目提供反馈的好机会。
我刚刚使用 x3d 测试了 jupyter notebook 集成,并在一些小问题后让它工作。
而且我的感觉与@thoth291相同:我希望 mayavi 隐含地为新单元格创建一个新图形。 我想这是我预料到的,因为这是 matplotlib 使用 %matplotlib 内联后端的默认设置。
但是,您也可以反对相反的情况:当使用 %matplotlib 笔记本后端时,必须显式地创建图形(如果没有,则使用先前打开的图形执行绘图操作,这有时会给用户带来令人惊讶的结果)。

回顾一下:不同的 matplotlib 后端在创建新图形方面表现不同。 从用户的角度来看,如果数字与单元格相关联会更容易。 但是,如果遵循 %matplotlib 笔记本建议,则可以遵循以下工作流程:

fig = mlab.figure() # create new figure
s = mlab.test_triangular_mesh() # draw something on it
fig # display figure

这确实有效,所以也许值得用这种工作方式重新格式化示例笔记本,以及记录 jupyter 笔记本的提示和技巧部分 (http://docs.enthought.com/mayavi/mayavi/tips. html).

无论如何,我想补充一点,我认为这个后端的存在很棒。 感谢@prabhuramachandran @GaelVaroquaux的辛勤工作!

最好的祝福,
弗洛里安

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

hadim picture hadim  ·  72评论

Ecauchy picture Ecauchy  ·  39评论

anntzer picture anntzer  ·  7评论

yassersouri picture yassersouri  ·  5评论

GaelVaroquaux picture GaelVaroquaux  ·  13评论