2016-06-28 61 views
1

我想在python中水平旋转图形。用鼠标我只能够通过一个自由度旋转,以及能够旋转的身影,例如这是我可以在momement做:如何旋转matplotlib中所有方向的图形

enter image description here

这些运动只有垂直。我希望能够在各个方向旋转的身影,例如:

enter image description here

这将允许我把这个数字在其一侧等,但此刻我不能做到这一点,所有的我可以做它沿着一个自由度旋转。

这里是我的代码:

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d.art3d import Poly3DCollection 
import numpy as np 
import math 

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

nphi,nz= 13, 101 
r=1 
phi = np.linspace(0,360, nphi)/180.0*np.pi 
z= np.linspace(0,350,nz) 

cols=[] 
verts2 = [] 
for i in range(len(phi)-1): 
    cp0= r*np.cos(phi[i]) 
    cp1= r*np.cos(phi[i+1]) 
    sp0= r*np.sin(phi[i]) 
    sp1= r*np.sin(phi[i+1]) 

    for j in range(len(z)-1): 
     z0=z[j] 
     z1=z[j+1] 
     verts=[] 
     verts.append((cp0, sp0, z0)) 
     verts.append((cp1, sp1, z0)) 
     verts.append((cp1, sp1, z1)) 
     verts.append((cp0, sp0, z1)) 
     verts2.append(verts) 

     col=plt.cm.Blues(0.4) 
     cols.append(col) 

poly3 = Poly3DCollection(verts2, facecolor=cols ,edgecolor = "red") 
poly3.set_alpha(0.5) 

ax.add_collection3d(poly3) 
ax.set_xlabel('X') 
ax.set_xlim3d(-3, 3) 
ax.set_ylabel('Y') 
ax.set_ylim3d(-3, 3) 
ax.set_zlabel('Z') 
ax.set_zlim3d(0, 300) 

plt.axis('off') 
ax.axes.get_xaxis().set_visible(False) 
ax.axes.get_yaxis().set_visible(False) 
plt.show() 

回答

3

不幸的是,我不认为你可以;来自documentation

'elev'存储z平面中的仰角。 “阿齐姆”存储在x 方位角,y平面

所以,你没有真正得到了3个自由度的位置,因为你只能在XY旋转平面,而不是围绕每个轴独立。

如果显示轴这是一个有点清晰:

enter image description here