Python中的曲面图和等高线图
Matplotlib的引入牢记,只有二维绘图。但是在 1.0 版本发布的时候,3d 实用程序是在 2d 上开发的,因此,我们今天可以使用 3d 数据实现!通过导入 mplot3d 工具包启用 3d 绘图。在本文中,我们将详细讨论曲面图和等高线图。
曲面图
曲面图是三维数据集的表示。它描述了两个自变量 X 和 Z 以及指定的因变量 Y 之间的函数关系,而不是显示单个数据点。它是等高线图的伴生图。它类似于线框图,但线框的每个面都是一个填充的多边形。这有助于创建正在可视化的表面的拓扑。
曲面图用于:
- 可视化机器学习和深度学习中的损失函数
- 在强化学习中可视化存储或状态值函数
创建 3D 曲面图
Matplotlib 的 mpl_toolkits.mplot3d 工具包中的 axes3d 提供了用于创建 3D 曲面图的必要函数。曲面图是使用ax.plot_surface()
函数创建的。
句法:
ax.plot_surface(X, Y, Z)
其中 X 和 Y 是 x 和 y 点的二维数组,而 Z 是高度的二维数组。
示例 1:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7])
a, b = np.meshgrid(a, b)
# surface plot for a + b
fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.plot_surface(a, b, a + b)
plt.show()
输出:
示例 2:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7])
a, b = np.meshgrid(a, b)
# surface plot for a**2 + b**2
a = np.arange(-1, 1, 0.02)
b = a
a, b = np.meshgrid(a, b)
fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.plot_surface(a, b, a**2 + b**2)
plt.show()
计数地块
等高线图也称为水平图,是一种用于在 2-D 空间中进行多变量分析和可视化 3-D 图的工具。如果我们将 X 和 Y 作为我们想要绘制的变量,那么响应 Z 将被绘制为 XY 平面上的切片,因为这些轮廓有时被称为 Z 切片或等响应。
等高线图广泛用于可视化山的密度、海拔或高度以及气象部门。由于使用如此广泛, matplotlib.pyplot
提供了一种方法 contour 使我们可以轻松绘制等高线图。
创建等高线图
matplotlib.pyplot.contour() 通常在 Z = f(X, Y) 时很有用,即 Z 作为输入 X 和 Y 的函数而变化。contourf() 也可用,它允许我们绘制填充轮廓。
句法:
matplotlib.pyplot.contour([X, Y, ] Z, [levels], **kwargs)
在哪里,
- X, Y:与 Z 形状相同的二维 NumPy 数组或一维数组,使得
len(X)==M
和len(Y)==N
(其中 M 和 N 是 Z 的行和列)
Z:绘制轮廓的高度值。形状为 (M, N)
级别:确定等高线/区域的数量和位置。
示例 1:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7])
a, b = np.meshgrid(a, b)
# surface plot for a + b
fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.contour(a, b, a + b)
plt.show()
输出:
示例 2:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6, 7])
a, b = np.meshgrid(a, b)
# surface plot for a**2 + b**2
a = np.arange(-1, 1, 0.02)
b = a
a, b = np.meshgrid(a, b)
fig = plt.figure()
axes = fig.gca(projection ='3d')
axes.contour(a, b, a**2 + b**2)
plt.show()
输出: