Python Matplotlib 3D线通过表面出现

时间:2013-06-06 10:46:27

标签: python 3d matplotlib

我正在使用映射将立方体表面上的点转换为球体。

我想绘制生成的球体的表面和立方体边缘所在的线条。

到目前为止,我已经尝试了以下方法,一次在立方体的一个面上工作:

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

def sphere_mapping(xbar,ybar,zbar):
    xx = xbar**2
    yy = ybar**2
    zz = zbar**2
    x = xbar*np.sqrt(1 - yy/2 - zz/2 + yy*zz/3)
    y = ybar*np.sqrt(1 - xx/2 - zz/2 + xx*zz/3)
    z = zbar*np.sqrt(1 - xx/2 - yy/2 + xx*yy/3)
    return x,y,z

fig = plt.figure()
ax = fig.add_subplot(111,projection='3d',aspect='equal')
sgrd1,sgrd2 = np.meshgrid(np.linspace(-1,1,100),np.linspace(-1,1,100))
sgrd3 = np.ones((100,100))
lgrd1 = np.hstack([np.linspace(-1,1,100),np.ones(100,),np.linspace(1,-1,100),-np.ones(100,)])
lgrd2 = np.hstack([np.ones(100,),np.linspace(1,-1,100),-np.ones(100,),np.linspace(-1,1,100)])
lgrd3 = np.ones(400,)

# Plot surface
# x=+1
x,y,z=transform(fgrd3,fgrd1,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# y=+1
x,y,z=transform(fgrd1,fgrd3,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# x=-1
x,y,z=transform(-fgrd3,fgrd1,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# y=-1
x,y,z=transform(fgrd1,-fgrd3,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# z=+1
x,y,z=transform(fgrd2,fgrd1,fgrd3)
ax.plot_surface(x,y,z,linewidth=0)
# z=-1    
x,y,z=transform(fgrd2,fgrd1,-fgrd3)
ax.plot_surface(x,y,z,linewidth=0)

# Plot lines
# x=+1
x,y,z=transform(lgrd3,lgrd1,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# y=+1
x,y,z=transform(lgrd1,lgrd3,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# x=-1
x,y,z=transform(-lgrd3,lgrd1,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# y=-1
x,y,z=transform(lgrd1,-lgrd3,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# z=+1
x,y,z=transform(lgrd2,lgrd1,lgrd3)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# z=-1    
x,y,z=transform(lgrd2,lgrd1,-lgrd3)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')

plt.show()

这很好用。我得到一个球体,我得到边缘的粗黑线。但是,线条通过球体表面显示出来。 enter image description here

如果您更改映射以便只返回xbar,ybar,zbar,则会获得原始多维数据集并显示正确的行。 enter image description here

为什么我的线条会显示球体以及如何修复它?

0 个答案:

没有答案