在matplotlib中从元组列表绘制3D表面
当我们需要展示数据的三维变化趋势时,可以使用matplotlib中的三维绘图功能。本文将介绍如何从元组列表绘制3D表面。
绘制简单的3D表面
要绘制3D表面,首先需要导入相关库和数据:
import matplotlib.pyplot as plt
import numpy as np
# 定义x、y坐标轴
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([0, 1, 2, 3, 4, 5])
# 生成坐标点(x,y)的元组列表
points = [(i, j) for i in x for j in y]
# 根据坐标点生成随机的z坐标值
z = np.random.rand(len(points))
# 将元组拆分成两个数组
x, y = zip(*points)
# 将数据转化为np数组
x = np.array(x)
y = np.array(y)
z = np.array(z)
# 将坐标点和z坐标值组成坐标矩阵
X, Y = np.meshgrid(x, y)
Z = z.reshape(X.shape)
# 绘制3D表面
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.cool, linewidth=0.5, antialiased=True)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
以上代码中,我们首先定义了x、y坐标轴,并生成了坐标点(x,y)的元组列表。然后,根据坐标点生成了随机的z坐标值,并将元组拆分成两个数组(x,y)。接着,我们将坐标点和z坐标值组成坐标矩阵,并使用plot_surface()函数绘制3D表面。
运行以上代码,我们将获得一个简单的随机3D表面。
绘制带有颜色映射的3D表面
在上一个例子中,我们使用了plt.cm.cool来为3D表面进行颜色映射。除此之外,我们还可以使用其他的颜色映射。比如,我们可以使用plt.cm.viridis来为3D表面进行颜色映射。以下是具体的代码:
# 绘制3D表面
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.viridis, linewidth=0.5, antialiased=True)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
运行以上代码,我们将获得一个带有颜色映射的3D表面。
绘制带有等高线的3D表面
除了3D表面,我们还可以在表面上绘制等高线。以下是具体的代码:
# 绘制等高线
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cset = ax.contour(X, Y, Z, 20, cmap=plt.cm.coolwarm)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
在以上代码中,我们使用contour()函数绘制等高线。其中,20代表等高线的密度,cmap=plt.cm.coolwarm表示等高线的颜色映射。如果需要在等高线上显示标签,那么可以使用clabel函数。
结论
在matplotlib中从元组列表绘制3D表面,我们可以使用plot_surface()函数来绘制3D表面,并使用不同的颜色映射和颜色条进行调整。如果需要在表面上绘制等高线,那么可以使用contour()函数。