在Python中绘制2D面板以形成3D框

时间:2018-08-16 02:01:46

标签: python matplotlib plot 3d

我试图绘制多个2D面板以使用Python形成三个盒子,但遇到了一些麻烦。 我现在拥有的东西使用Matplotlib,但如果更容易,我愿意使用其他东西。

基本上这是我所获得的MWE:

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

L = 400
dx=2*4
dz=1*4

# create the figure
fig, axes = plt.subplots(ncols=1, nrows=1, figsize=(16, 8), subplot_kw=dict(projection='3d', aspect="equal"))

ax=axes

for i in range(3):
    x, y, z = np.arange(dx/2, L, dx)+i*5*L/4, np.arange(dx/2, L, dx), np.arange(-240, dz, dz)
    xx, yy = np.meshgrid(x, y)
    A=np.random.rand(*xx.shape)

    #----
    # Plot surface
    X = xx
    Y = yy
    Z = np.zeros_like(xx)

    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=plt.cm.viridis(A), shade=False)
    #----

    #----
    # Plot x-z cross-section
    xx, zz = np.meshgrid(x, z)
    Y=np.zeros_like(xx)
    X=xx
    Z=zz

    B=np.random.rand(*xx.shape)*2
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=plt.cm.viridis(B), shade=False)
    #----

    #----
    # Plot x-z cross-section
    yy, zz = np.meshgrid(y, z)
    X=np.zeros_like(xx)+xx.max()
    Y=yy
    Z=zz

    B=np.random.rand(*xx.shape)/2
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=plt.cm.viridis(B), shade=False)
    #----

#ax.set_axis_off()
# make the panes transparent
ax.xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
# make the grid lines transparent
ax.xaxis._axinfo["grid"]['color'] =  (1,1,1,0)
ax.yaxis._axinfo["grid"]['color'] =  (1,1,1,0)
ax.zaxis._axinfo["grid"]['color'] =  (1,1,1,0)

此代码基于this answer,并产生以下内容:

enter image description here

此图片有两处错误:

  • 长宽比已关闭
  • 与图片大小相比,盒子总是太小了

我认为我可以通过一些技巧来解决长宽比问题,尽管以适当的方式处理它会很好。但是,我疯狂地尝试放大图片而没有成功。

再次,我愿意使用pyplot以外的其他东西,但是,由于我打算使用xarray,因此可以将某些东西很好地融合在一起。

0 个答案:

没有答案