我试图绘制多个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,并产生以下内容:
此图片有两处错误:
我认为我可以通过一些技巧来解决长宽比问题,尽管以适当的方式处理它会很好。但是,我疯狂地尝试放大图片而没有成功。
再次,我愿意使用pyplot以外的其他东西,但是,由于我打算使用xarray
,因此可以将某些东西很好地融合在一起。