我想解决方案非常简单。但是我找不到任何关于如何更改mayavi渲染器窗口大小的示例。
示例代码:
import numpy as np
from tvtk.api import tvtk
from mayavi import mlab
points = np.random.normal(0, 1, (1000, 3))
ug = tvtk.UnstructuredGrid(points=points)
ug.point_data.scalars = np.sqrt(np.sum(points**2, axis=1))
ug.point_data.scalars.name = "value"
ds = mlab.pipeline.add_dataset(ug)
delaunay = mlab.pipeline.delaunay3d(ds)
iso = mlab.pipeline.iso_surface(delaunay)
iso.actor.property.opacity = 0.1
iso.contour.number_of_contours = 10
mlab.show()
我尝试了以下内容:
scene=mlab.gcf().scene
scene.set_size((600,600))
没有任何改变。
最好的问候和提前感谢...
答案 0 :(得分:3)
fig = mlab.figure(size=(600,600))
#then the rest of your code
答案 1 :(得分:1)
由于Mayavi使用x3dom渲染绘图,因此可以通过javascript修改DOM树。我在jupyter笔记本中写了这个js-cell,但我相信它可以在jupyter提供的custom.js文件中工作。 说实话,不确定性能,因为js本身对我来说很新鲜。
%%javascript
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var width = 600;
var height = 600;
var observer = new MutationObserver(function(mutations, observer) {
mutations.forEach(function(mutation){
if (mutation.target.className === 'x3dom-canvas')
{
var target = mutation.target;
if (target.getAttribute('width') < width)
target.setAttribute('width', width);
if (target.getAttribute('height') < height)
target.setAttribute('height', height);
}
});
});
observer.observe(document.body, {
subtree: true,
attributes: true
});
代码正在观察DOM树修改(要清楚的属性)和更改由Mayavi创建的特定节点的属性。