Как построить правильные 3D-оси в MayaVi, подобные найденным в Matplotlib

#python #matplotlib #plot #3d #mayavi

#python #matplotlib #построить #3D #mayavi

Вопрос:

Я хотел бы знать, как иметь правильные оси на 3D-графике поверхности в MayaVi. Лучшие оси, которые я мог создать, выглядели примерно так

введите описание изображения здесь

Однако они выглядят не очень профессионально, если бы я должен был провести презентацию или разместить их на плакате.

Я бы хотел, чтобы оси выглядели примерно так

введите описание изображения здесь

Эти оси выглядят намного более профессионально и их легче читать, чем оси MayaVi по умолчанию.

Любая помощь будет принята с благодарностью.

Спасибо!

Комментарии:

1. Какую версию MayaVi вы используете?

2. Ваш вопрос в основном «Мне не нравятся оси mayavi по умолчанию, как мне получить лучшие?» На мой взгляд, это не очень хороший вопрос, хотя это может быть важным запросом функции. Ответ на ваш вопрос заключается в том, что именно так выглядят оси в VTK. Если вы недовольны ими, у вас есть несколько вариантов. Вы можете поискать разные библиотеки, которые делают то, что вы хотите, вы можете попытаться вежливо спросить разработчиков mayavi / vtk, будут ли они реализовывать вашу функцию, или вы можете написать ее самостоятельно.

3. Просто столкнулся с той же проблемой. Хотя я согласен с тем, что «это именно так выглядит VTK», это не является удовлетворительным ответом. На мой взгляд, эта проблема делает mayavi практически бесполезным для научных приложений, поскольку вы никогда не сможете публиковать такие странно выглядящие графики. Собираюсь искать альтернативы … R кажется многообещающим

Ответ №1:

У меня тоже была эта проблема. Я взломал плохое обходное решение, не отображая оси mayavi, но рисуя нужные мне оси самостоятельно, используя plot3d ()

 from mayavi import mlab
import numpy as np
xx = yy = zz = np.arange(-0.6,0.7,0.1)
xy = xz = yx = yz = zx = zy = np.zeros_like(xx)    
mlab.plot3d(yx,yy lensoffset,yz,line_width=0.01,tube_radius=0.01)
mlab.plot3d(zx,zy lensoffset,zz,line_width=0.01,tube_radius=0.01)
mlab.plot3d(xx,xy lensoffset,xz,line_width=0.01,tube_radius=0.01)
 

Теперь вы можете добавлять метки и аннотации с помощью text3d ()
Очень неэлегантно и грубо, но работает в крайнем случае.

Комментарии:

1. Я думаю, это нормально. просто сохраните его как функцию, готовую к вызову. не так много грубой силы … 😉

2. Этот ответ спас мой день, лол