2017-09-17 6 views
1

J'ai essayé d'utiliser plot_surface dans matplotlib pour tracer une surface 3D. Mon code est:comment définir l'échelle de l'axe Z égal à X et Y axises en python plot_surface

fig = plt.figure() 
ax = fig.gca(projection='3d') 
# ax.set_aspect('equal') 
ax.plot_surface(X, Y, H4200, rstride=1000, cstride=1000) 

ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 
# ax._autoscaleXon = True 
# ax._autoscaleYon = True 
# ax._autoscaleZon = True 
# ax.set_aspect('equal', adjustable='box') 

plt.show() 

le résultat de la parcelle sont:

1:

enter image description here

2:

enter image description here

De toute évidence, la longueur de Z unités ne sont pas égales aux unités de X a nd Y axises.

Ma question est de savoir comment régler l'échelle de l'axe Z égale à l'échelle de X et Y axises?

J'ai essayé ax.set_aspect('equal'), ax._autoscaleXon = True, ax._autoscaleYon = True, ax._autoscaleZon = True, ax.set_aspect('equal', adjustable='box') comme vu dans mes commentaires, mais ce n'est pas de travail, comment puis-je faire pour résoudre cette question? J'ai besoin de votre aide, merci!

Répondre

0

Essayez,

ax.set_aspect(1) 

Il fonctionne pour moi.

Edit 1

Dans votre cas, je pense que set_aspect (1) ou set_aspect ('égal') échoue parce que l'axe des forces de matplotlib autoscale z pour accueillir l'ensemble des données z (avec un autre ordre de grandeur que x et y). Dans une telle situation, vous avez besoin de quelques astuces disponibles here.

+0

J'ai essayé, mais cela ne fonctionne toujours pas – yogazining

+0

@yogazining s'il vous plaît voir ma réponse éditée. – swatchai

+0

merci beaucoup, j'ai mis en place votre solution et cela fonctionne! génial!! – yogazining