J'apprends à utiliser mplot3d pour produire de jolis graphiques de données 3D et je suis assez content jusqu'à présent. Ce que j'essaye de faire en ce moment, c'est une petite animation d'une surface en rotation. Pour cela, je dois définir une position de caméra pour la projection 3D. Je suppose que cela doit être possible car une surface peut être tournée à l'aide de la souris lors de l'utilisation interactive de matplotlib. Mais comment puis-je faire cela à partir d'un script? J'ai trouvé beaucoup de transformations dans mpl_toolkits.mplot3d.proj3d mais je n'ai pas pu trouver comment les utiliser pour mon objectif et je n'ai trouvé aucun exemple de ce que j'essaie de faire.
python
matplotlib
mplot3d
Andreas Bleuler
la source
la source
%matplotlib notebook
Réponses:
Par «position de la caméra», il semble que vous vouliez ajuster l'élévation et l'angle azimutal que vous utilisez pour visualiser le tracé 3D. Vous pouvez définir cela avec
ax.view_init
. J'ai utilisé le script ci-dessous pour créer d'abord le tracé, puis j'ai déterminé une bonne élévation, ouelev
, à partir de laquelle afficher mon tracé. J'ai ensuite ajusté l'angle d'azimut, ouazim
, pour faire varier les 360 degrés autour de mon tracé, en enregistrant la figure à chaque instance (et en notant quel angle d'azimut lorsque j'ai enregistré le tracé). Pour un panoramique de caméra plus compliqué, vous pouvez ajuster à la fois l'élévation et l'angle pour obtenir l'effet souhaité.la source
ax.elev
queax.azim
propriétés et . Vous pourriez aussi avoir juste écritax.azim = ii
ou mêmeax.azim += 1
obtenir le même effet.Ce qui serait pratique serait d'appliquer la position de la caméra à un nouveau tracé. Je trace donc, puis déplace le tracé avec la souris en changeant la distance. Essayez ensuite de reproduire la vue en incluant la distance sur un autre tracé. Je trouve que axx.ax.get_axes () me donne un objet avec les anciens .azim et .elev.
À PYTHON ...
Graphique 3D plus tard ...
EDIT 1 ... OK, la position de la caméra est une mauvaise façon de penser concernant la valeur .dist. Il chevauche tout comme une sorte de multiplicateur scalaire de hackey pour l'ensemble du graphique.
Cela fonctionne pour le grossissement / zoom de la vue:
Graphique ultérieur ...
la source