Python - 使用等高线图绘制两个 3D 图形

标签 python numpy matplotlib 3d

我正在尝试用两个 3D 图(相同的函数,不同的角度)和相同函数的 2D 等高线图在 Python 中绘制一个图形,我不知道为什么,但是前两个图形没问题,并且等高线图很奇怪,它出现在前两个图的底部,而且尺寸都很奇怪(见附图)。有没有办法将 map 放在另外 2 个图形的右侧并调整其大小以使其更像正方形?

感谢您的帮助。

这是我的代码:

import numpy as np
import matplotlib.pylab as plt
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-5, 5, 0.01)
y = np.arange(-5, 5, 0.01)
X, Y = np.meshgrid(x, y)

Z = 5 + (10 * X**2 + 20 * Y**2) * np.exp((-X**2)-(Y**2)) + 3 *np.sin(X) - np.sin(Y)

fig = plt.figure(figsize=(15,5))

ax1 = plt.subplot(131, projection='3d')
surf1 = ax1.plot_surface(X, Y, Z, cmap=cm.coolwarm)

ax2 = plt.subplot(132, projection='3d')
surf2 = ax2.plot_surface(X, Y, Z, cmap=cm.coolwarm)
for angle in range(0,360):
    ax2.view_init(20, angle)
    plt.pause(.001)

ax3 = plt.subplot(133)
surf3 = ax3.contour(X, Y, Z, colors='black', linestyles='dashed')
plt.clabel(surf3, fmt = '%.0f', inline=True, fontsize=8)


ax1.set_xlabel('X')
ax2.set_xlabel('X')
ax3.set_xlabel('X')
ax1.set_ylabel('Y')
ax2.set_ylabel('Y')
ax3.set_ylabel('Y')
ax1.set_zlabel('Z')
ax2.set_zlabel('Z')

plt.show()

Here's the screenshot of the figures

最佳答案

明白了:

import numpy as np
import matplotlib.pylab as plt
import matplotlib.cm as cm
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-5, 5, 0.01)
y = np.arange(-5, 5, 0.01)
X, Y = np.meshgrid(x, y)

Z = 5 + (10 * X**2 + 20 * Y**2) * np.exp((-X**2)-(Y**2)) + 3 *np.sin(X) - np.sin(Y)

fig = plt.figure(figsize=(15,5))

ax1 = fig.add_subplot(1, 3, 1, projection='3d')
surf1 = ax1.plot_surface(X, Y, Z, cmap=cm.coolwarm)

ax3 = fig.add_subplot(1, 3, 2)
surf3 = ax3.contour(X, Y, Z, colors='black', linestyles='dashed')
plt.clabel(surf3, fmt = '%.0f', inline=True, fontsize=8)


ax2 = fig.add_subplot(1, 3, 3, projection='3d')
surf2 = ax2.plot_surface(X, Y, Z, cmap=cm.coolwarm)


for angle in range(0,360):
    ax2.view_init(20, angle)
    plt.pause(.001)

ax1.set_xlabel('X')
ax2.set_xlabel('X')
ax3.set_xlabel('X')
ax1.set_ylabel('Y')
ax2.set_ylabel('Y')
ax3.set_ylabel('Y')
ax1.set_zlabel('Z')
ax2.set_zlabel('Z')

plt.show()

关于Python - 使用等高线图绘制两个 3D 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031321/

相关文章:

python - pyvenv-3.4 返回非零退出状态 1

python - 如何导入上一级模块并使用最新的定义?

python - 修改 2d-numpy 数组主对角线的一部分

numpy:有限差分的差异和梯度之间的不同结果

python - 如何绘制标准差

python - 比较日期并找到最接近当前日期的日期

python - numpy 对象数组

python - Numpy shuffle 多维数组仅按行,保持列顺序不变

python - Matplotlib 在同一轴上超过 3 条线

matplotlib - 在双轴上调整刻度标签大小