mlab savefig не сохраняет изображение

Поэтому я пытаюсь сохранить фигуру, используя Mayavi. Код показан ниже.

mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5))
mlab.contour3d(i, a, d, abs(ber), contours=10, opacity=0.5, colormap='hot')
mlab.outline()
mlab.colorbar(orientation='vertical')

mlab.axes(color=(0.5,0.5,0.5), line_width=4, xlabel='I', ylabel='A', zlabel='D')
mlab.move(forward=-4, right=-4)

mlab.savefig('abc.png', figure=mlab.gcf(), magnification=2)
mlab.show()

Данные отображаются на экране нормально. Например: Снимок экрана

Но когда я делаю savefig(), к сожалению, возникает проблема. Я получаю пустую фигуру. Я даже пытался сделать screenshot() и построить это с помощью pylab.imshow(), но это тоже оказалось пустым. Я даже пытался сохранить напрямую кнопкой сохранения в окне mlab, и даже это дает пустое изображение!

Я уже проверил [ mayavi mlab.savefig() дает пустое изображение ] но, похоже, это не помогает.

Я начинаю подозревать, что проблема в бэкэнде. Я использую wxPython в системе Windows 7 с бэкэндом Qt. Я также пробовал почти все бэкенды, которые у меня были, даже с обычной неинтерактивной консолью, и это не сработало.

У кого-нибудь есть опыт в этом??


person ssm    schedule 03.02.2014    source источник
comment
Предполагая, что я вставил некоторые случайные данные для ваших данных, фрагмент кода, который у вас есть, отлично работает для меня. Что именно вы имеете в виду, говоря, что я использую wxPython... с бэкэндом Qt   -  person aestrivex    schedule 04.02.2014
comment
Насколько я понимаю, функция savefig() просто делает снимок экрана прямо с экрана. Бэкэнд выводит изображение на экран. Если есть несоответствие между процессом захвата и процессом отображения, то изображение не будет захвачено. Я уже видел это при захвате видео, когда программа рендерит напрямую, используя прямой доступ к оборудованию. При увеличении = 2 я вижу, что экран увеличивает изображение и выполняет захват, но все данные равны 0. Я думаю, может быть, что-то вроде этого происходит. Хотя не уверен.   -  person ssm    schedule 04.02.2014
comment
Да. Но если бы вы использовали wxpython, то я бы предположил, что вы использовали бы бэкэнд wx. (Если вы не пытаетесь сказать, что у вас есть окно Mayavi, использующее бэкэнд Qt, встроенный в приложение wxpython?) Я, вероятно, не смогу вам помочь, но что произойдет, если вы сделаете magnification=1?   -  person aestrivex    schedule 04.02.2014
comment
На самом деле мой wxPython поставляется с несколькими предварительно настроенными консолями, одна из них использует бэкенд Qt. Там написано IPython (Qt). Так вот что я использую для запуска программы. Я обычно использую это, потому что бэкэнд wx по умолчанию создает проблемы с взаимодействием pylab. Этого не должно происходить, но это происходит. Что-то не так с моей установкой! Попытаюсь сделать чистую переустановку и посмотреть, поможет ли это.   -  person ssm    schedule 04.02.2014
comment
magnification=1 ничего не меняет. Изначально у меня не было этого параметра. Я поставил magnification=2 просто как дополнительную проверку...   -  person ssm    schedule 04.02.2014
comment
Извините, когда я сказал wxPython, я действительно имел в виду Python(x,y). Очень сожалею о путанице. По плохому.   -  person ssm    schedule 04.02.2014


Ответы (1)