【发布时间】:2020-05-23 19:32:35
【问题描述】:
我正在尝试使用 matplotlib 创建一个 3D 图,它表示特定域的外边界。该边界由上表面和下表面组成,使用plot_surface 方法很容易将其可视化。我的问题是可视化平行于 xz 和 yz 平面的四个平面(见下图)。由于这些表面也限制了域,我希望它们的颜色稍微透明。我的问题是,我怎样才能做到这一点?下面附有上下边界的最小工作示例以及说明所需结果的图像。提前感谢您的帮助!
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
# Values for g11up and g11dw
x = np.linspace(-1, 1, 50)
# Meshgrid
X, Y = np.meshgrid(x, x)
Z = 2 - (X**2 + Y**2)
# Create figure and axes
fig = plt.figure(figsize=(4, 4.5))
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.set_zlabel(r'$z$')
# Plot the upper surface
ax.plot_surface(X, Y, -Z, cmap=cm.Blues, vmin=-2*Z.max(), vmax=Z.max(),
alpha=0.9, linewidth=0)
# Plot the lower surface
ax.plot_surface(X, Y, Z, cmap=cm.Blues, vmin=-2*Z.max(), vmax=Z.max(),
alpha=0.9, linewidth=0)
# Plot edges
z = 1-x**2
for sign in [1, -1]:
ax.plot(x, np.ones(len(x)), sign*z, color='k', lw=1, zorder=3)
ax.plot(x, -np.ones(len(x)), sign*z, color='k', lw=1, zorder=4)
ax.plot(np.ones(len(x)), x, sign*z, color='k', lw=1, zorder=4)
ax.plot(-np.ones(len(x)), x, sign*z, color='k', lw=1, zorder=3)
ax.set_aspect('equal')
plt.show()
plt.close()
【问题讨论】:
-
这似乎是你要找的东西:stackoverflow.com/a/36738573/7042795
标签: python matplotlib plot 3d