使用 Matplotlib 在 Python 中绘制三维曲面
原文:https://www.geesforgeks.org/3d-surface-python 绘图-使用-matplotlib/
一个曲面图是一个三维数据集的表示。它描述了两个自变量 X 和 Z 与一个指定因变量 Y 之间的函数关系,而不是显示单个数据点。这是等高线图的配套图。它类似于线框图,但线框的每个面都是一个填充的多边形。这有助于创建正在可视化的曲面拓扑。
创建三维曲面图
Matplotlib 的 mpl_toolkits.mplot3d toolkit 中的 axes3d 提供了用于创建 3d 曲面图的必要功能。使用 ax.plot_surface()函数创建曲面图。 语法:
ax.plot_surface(X, Y, Z)
其中 X 和 Y 是 X 和 Y 点的 2D 阵列,而 Z 是高度的 2D 阵列。ax.plot_surface()函数的更多属性如下:
示例:让我们使用上面的函数创建一个 3D 表面
蟒蛇 3
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
# Creating plot
ax.plot_surface(x, y, z)
# show plot
plt.show()
输出:
梯度表面图
渐变曲面图是三维曲面图与 2D 等高线图的组合。在此图中,三维表面像 2D 等高线图一样着色。表面高的部分与表面低的部分包含不同的颜色。 语法:
surf = ax.plot_surface(X,Y,Z,cmap=,线宽=0,抗锯齿=False)
属性 cmap=表示表面的颜色。也可以通过调用 fig.colorbar 来添加颜色条,下面的代码创建一个渐变表面图: 示例:
蟒蛇 3
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
# Creating color map
my_cmap = plt.get_cmap('hot')
# Creating plot
surf = ax.plot_surface(x, y, z,
cmap = my_cmap,
edgecolor ='none')
fig.colorbar(surf, ax = ax,
shrink = 0.5, aspect = 5)
ax.set_title('Surface plot')
# show plot
plt.show()
输出:
具有 2D 等高线图投影的三维表面图
使用 Matplotlib 绘制的三维曲面图可以投影到 2D 曲面上。下面的代码创建了一个三维图,并将其在 2D 等高线图上的投影可视化: 示例:
蟒蛇 3
# Import libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
# Creating dataset
x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T # transpose
z = (np.sin(x **2) + np.cos(y **2) )
# Creating figure
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
# Creating color map
my_cmap = plt.get_cmap('hot')
# Creating plot
surf = ax.plot_surface(x, y, z,
rstride = 8,
cstride = 8,
alpha = 0.8,
cmap = my_cmap)
cset = ax.contourf(x, y, z,
zdir ='z',
offset = np.min(z),
cmap = my_cmap)
cset = ax.contourf(x, y, z,
zdir ='x',
offset =-5,
cmap = my_cmap)
cset = ax.contourf(x, y, z,
zdir ='y',
offset = 5,
cmap = my_cmap)
fig.colorbar(surf, ax = ax,
shrink = 0.5,
aspect = 5)
# Adding labels
ax.set_xlabel('X-axis')
ax.set_xlim(-5, 5)
ax.set_ylabel('Y-axis')
ax.set_ylim(-5, 5)
ax.set_zlabel('Z-axis')
ax.set_zlim(np.min(z), np.max(z))
ax.set_title('3D surface having 2D contour plot projections')
# show plot
plt.show()
输出: