在MatPlotLib python

时间:2017-05-06 19:43:28

标签: python matplotlib

我有一堆数据,我可以生成离散的3D曲线,当绘制时我只是在每个z值得到一堆2D线,如曲线1(a)和(b),我想要能够绘制2D线描绘的表面,类似于我在曲线1(a + b)中所做的,但我想绘制整个表面,而不是描绘出的网格,并可能添加颜色渐变可视化每条曲线的深度。这可能吗?我在z值之间没有数据点,仅针对z的每个离散值。

曲线1(a)和曲线1(b)都是从完全相同的离散xy和z值生成的,在我的代码中,我不得不把它分解成水平和垂直部分,有没有办法绘制网格或表面,而不必像这样分开?

对于z_vals中的每个z值,我有一个相应的图(x,y)保存在(zarr [:,0],zarr [:,1])中。

此外,我希望能够绘制曲线2中的附加曲线,但仅在按下单选按钮时,或仅在曲线1和曲线2之间绘制动画,但在同一图表上。

到目前为止,这是我的代码,

z_htxt = np.array(['z_h_0_05','z_h_0_06','z_h_0_07','z_h_0_08','z_h_0_09','z_h_0_1','z_h_0_125','z_h_0_15','z_h_0_175','z_h_0_2','z_h_0_225','z_h_0_25','z_h_0_275','z_h_0_3','z_h_0_325','z_h_0_35','z_h_0_375','z_h_0_4','z_h_0_45','z_h_0_5','z_h_0_55','z_h_0_6','z_h_0_65','z_h_0_7','z_h_0_75','z_h_0_8','z_h_0_85','z_h_0_9','z_h_0_93'])
fig = plt.figure()
ax = fig.add_subplot(221,projection='3d')
ax2 = fig.add_subplot(222,projection='3d')
ax3 = fig.add_subplot(223,projection='3d')
ax4 = fig.add_subplot(224,projection='3d')
z_vals = np.array([.05,.06,.07,.08,.09,.1,.125,.15,.175,.2,.225,.25,.275,.3,.325,.35,.375,.4,.45,.5,.55,.6,.65,.7,.75,.8,.85,.9,.93])
zarr = np.zeros([z_htxt.size,2,30])

for i in range(z_htxt.size):
    ltxt = z_htxt[i]+'_Q2_100.txt'
    zarr[i] = np.loadtxt(ltxt)
    ax2.plot(zarr[i,0],zarr[i,1],zs=z_vals[i],zdir='z',c='b')
    ax3.plot(zarr[i,0],zarr[i,1],zs=z_vals[i],zdir='z',c='b')
ax.plot(zarr[:,0],zarr[:,1],z_vals,zdir='z',c='b')
ax3.plot(zarr[:,0],zarr[:,1],z_vals,zdir='z',c='b')

for j in range(z_htxt.size):
    ltxt = z_htxt[j]+'_Q2_1000.txt'
    zarr[j] = np.loadtxt(ltxt)
    ax4.plot(zarr[j,0],zarr[j,1],zs=z_vals[j],zdir='z',c='r')
ax4.plot(zarr[:,0],zarr[:,1],z_vals,zdir='z',c='r')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_zlim(0,1)
ax.view_init(elev=120,azim=-90)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_zlim(0,1)
ax2.view_init(elev=120,azim=-90)
ax3.set_xlabel('X')
ax3.set_ylabel('Y')
ax3.set_zlabel('Z')
ax3.set_zlim(0,1)
ax3.view_init(elev=120,azim=-90)
ax4.set_xlabel('X')
ax4.set_ylabel('Y')
ax4.set_zlabel('Z')
ax4.set_zlim(0,1)
ax4.view_init(elev=120,azim=-90)

我的代码目前只是从表格中提取x,y和z值,然后绘制2D线条。我尝试使用plot_surface(),但无济于事,因为它试图引用我没有数据的z值。这可能是奇怪的解释,如果我能清除任何事情,请告诉我。

我的(x,y,z)数组(zarr [:,0],zarr [:,1],z_vals [:])的形状是:  对于x y和z,分别为(29,30),(29,30),(29,)。如果需要,我可以提供完整的数组。 谢谢!

0 个答案:

没有答案