2017-10-13 7 views
0

J'ai tracé des diagrammes de dispersion 3D à partir de données expérimentales. Il représente le contour d'un objet de type ellipsoïde. La taille et la forme de l'ellipsoïde varient avec l'échantillon.Ajouter des axes 3D utiles sur le côté matplotlib

C'est la raison pour laquelle je veux sauvegarder le nuage de points sous forme de projections 2D de mes données, suivant les plans (xOy), (xOz) et (yOz) (et probablement d'autres). Pour plus de clarté, je me demandais comment puis-je aussi dessiner les axes sur lesquels je projette, du côté de l'intrigue (tout comme les logiciels de visualisation moléculaire peuvent faire). J'ai fait un exemple en ajoutant grossièrement les axes avec Inkscape, mais je voudrais une solution en utilisant matplotlib si possible.

Voir l'exemple d'image suivant.

enter image description here

Répondre

0

Vous pouvez ajouter un autre axe à la figure, situé dans le coin inférieur gauche, par exemple

xax = fig.add_axes([0.1, 0.1,0.2, 0.2]) 

et de tracer des annotations avec des flèches.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

xax = fig.add_axes([0.1, 0.1,0.2, 0.2]) 

xax.annotate('', xy=(1, 0), xytext=(0, 0), 
      arrowprops=dict(facecolor='black', shrink=0.02), clip_on=False) 
xax.annotate('x', xy=(1.1, 0), clip_on=False, va="center") 
xax.annotate('', xy=(0, 1), xytext=(0, 0), 
      arrowprops=dict(facecolor='black', shrink=0.02), clip_on=False) 
xax.annotate('y', xy=(0, 1.1), clip_on=False, ha="center") 
xax.set_xlim(-.2,1.5) 
xax.set_ylim(-.2,1.5) 
xax.set_aspect("equal") 
xax.axis("off") 

plt.show() 

enter image description here

Ceci est bien sûr pas synchronisé avec les axes 3D, de sorte que vous pouvez produire un de ces axes par vue que vous souhaitez enregistrer.

+0

Superbe! Exactement ce que je cherchais. La non-synchronisation n'est pas un problème car ma demande était destinée aux vues finales, donc je ferai exactement ce qui est suggéré. Merci beaucoup –