微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Mayavi 嵌入到类中并在 Jupyter Notebook 单元格上显示图形

如何解决将 Mayavi 嵌入到类中并在 Jupyter Notebook 单元格上显示图形

我正在尝试将 mayavi 与我在 Jupyter Notebook 中的工作流程集成。下面的精简代码示例可能看起来不必要的复杂,但这些是我不允许更改的限制。

Test 用于将某些内容绘制为 mlab 图形。类 Wrapper 实例化 Test 类,而 wrapper_func() 函数用户公开:它返回 Wrapper 实例并且应该在以下情况下显示 mlab 数字关键字参数 show=True

注意:我不允许更改 Wrapperwrapper_func。此外,Test 类应实现 show() 方法

from mayavi import mlab
mlab.init_notebook()
import numpy as np

class Test:
    def __init__(self):
        self.fig = mlab.figure()
        self._add_data()
        
    def _add_data(self):
        pi = np.pi
        cos = np.cos
        sin = np.sin
        dphi,dtheta = pi / 250.0,pi / 250.0
        [phi,theta] = np.mgrid[0:pi + dphi * 1.5:dphi,0:2 * pi + dtheta * 1.5:dtheta]
        m0 = 4; m1 = 3; m2 = 2; m3 = 3
        m4 = 6; m5 = 2; m6 = 6; m7 = 4
        r = sin(m0 * phi) ** m1 + cos(m2 * phi) ** m3 + \
            sin(m4 * theta) ** m5 + cos(m6 * theta) ** m7
        x = r * sin(phi) * cos(theta)
        y = r * cos(phi)
        z = r * sin(phi) * sin(theta)
        mlab.mesh(x,y,z,figure=self.fig)
        
    def show(self):
        return self.fig

class Wrapper:
    def __init__(self):
        self.t = test()
        
    def show(self):
        self.t.show()

def wrapper_func(show=True):
    w = Wrapper()
    if show:
        w.show()
    return w

然后,用户在 Jupyter Notebook 单元格中写入:

wrapper_func()

这应该在输出单元格中显示绘图。不幸的是,该图未显示

或者,用户可以执行以下操作:

w = wrapper_func(show=False)
w.show()

如何在输出单元格中显示图形?

解决方法

在Test类中创建网格时,赋值给

self.surf=mlab.mesh( ... )

return self.surf in show()

在程序中用作:

t=Test();
t.show()
from mayavi import mlab
mlab.init_notebook()
import numpy as np

class Test:
    def __init__(self):
        self.fig = mlab.figure()
        self._add_data()
        
    def _add_data(self):
        pi = np.pi
        cos = np.cos
        sin = np.sin
        dphi,dtheta = pi / 250.0,pi / 250.0
        [phi,theta] = np.mgrid[0:pi + dphi * 1.5:dphi,0:2 * pi + dtheta * 1.5:dtheta]
        m0 = 4; m1 = 3; m2 = 2; m3 = 3
        m4 = 6; m5 = 2; m6 = 6; m7 = 4
        r = sin(m0 * phi) ** m1 + cos(m2 * phi) ** m3 + \
            sin(m4 * theta) ** m5 + cos(m6 * theta) ** m7
        x = r * sin(phi) * cos(theta)
        y = r * cos(phi)
        z = r * sin(phi) * sin(theta)
        self.surf = mlab.mesh(x,y,z,figure=self.fig)
        
    def show(self):
        return self.surf

t=Test()
t.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?