Я пытаюсь построить два виджета плоскости изображения в двух разных сценах в майави сразу. Но оба плана показаны в первой сцене. Кто-нибудь знает, как это исправить?Построение графика в двух разных сценах
Вот пример моего кода:
import numpy as np
from mayavi import mlab
from mayavi.mlab import axes, outline
from traitsui.api import View, Item, Group, HGroup
from mayavi.core.pipeline_base import PipelineBase
from mayavi.core.ui.api import MayaviScene, SceneEditor, MlabSceneModel
class myclass():
p='somedata[20][20][20]' #I can't give you the data here because it's too big
scene = Instance(MlabSceneModel,())
sx = Instance(MlabSceneModel,())
plot = Instance(PipelineBase)
def function(self):
self.src = mlab.pipeline.scalar_field(self.p)
self.plot2 = self.scene.mlab.pipeline.image_plane_widget(self.src,
plane_orientation='x_axes',
slice_index=0,
#vmin=0, vmax=140,
colormap='hot')
self.sx.scene.parallel_projection = True
side_src = self.plot.ipw._get_reslice_output() #gets the data for the 2d planes
self.ipw = self.sx.mlab.pipeline.image_plane_widget( #creates the 2d views
side_src,
plane_orientation='z_axes',
#vmin=self.data.min(),
#vmax=self.data.max(),
#figure=self.sx.mayavi_scene,
name='Cut view X',
colormap='hot',
)
mlab.colorbar(title='Wert', orientation='vertical', nb_labels=5, label_fmt='%.3f') #adds a colorbar at the left side of the screen
mlab.view(azimuth=50,elevation=50,distance=80,focalpoint=(10,15,10)) #defines the starting view of the camera
mlab.roll(110)
self.scene.scene_editor.background = (0, 0, 0)
view = View(HGroup(Item('scene', editor=SceneEditor(scene_class=MayaviScene),
height=400, width=500, show_label=False),
Item('sx',editor=SceneEditor(scene_class=MayaviScene),
height=400, width=500, show_label=False),),
resizable=True,
)
myclass()
я не мог найти решение в Интернете, есть примеры с несколькими сценами, но я не могу понять, почему она работает там, а не в мой код. Любая помощь будет приятной.
При попытке использования figure
kwarg в image_plane_widget
, как этот
self.plot = mlab.pipeline.image_plane_widget(self.src,
plane_orientation='x_axes',
slice_index=0,
#vmin=0, vmax=140,
figure=self.sx,
colormap='hot')
он возвращает следующее сообщение об ошибке:
TraitError: The 'figure' trait of an ImagePlaneWidgetFactory instance must be a Scene or None, but a value of was specified.
Как вы, возможно, видели, у меня есть цифра kwarg в моем коде, но я отметил ее как комментарий, потому что она не работает с фигурой. – Singularity
Это потому, что 'self.sx' не инициализируется. На самом деле ваш фрагмент кода вообще не имеет объектной модели (т. Е. 'Self' никогда не определяется). Я не внимательно смотрел на ваш код, но предположил, что вы это поняли. – aestrivex
О, да, код normaly написан в функции с объявлением self – Singularity