Matplotlib 3D Surface Plots
参考:matplotlib 3d surface plots
Matplotlib 是一个用于绘制数据可视化图形的 Python 库,它提供了丰富的功能和灵活的接口,可以用来创建各种类型的图表,包括 3D 表面图。在本文中,我们将详细介绍如何使用 Matplotlib 创建 3D 表面图,包括如何设置坐标轴、绘制数据点和添加标签等。
1. 导入 Matplotlib 和 Numpy 库
在开始之前,我们首先需要导入 Matplotlib 和 Numpy 库,这两个库是创建 3D 表面图所必需的。下面是导入库的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
2. 创建 3D 表面图
接下来,我们将创建一个简单的 3D 表面图,以展示如何使用 Matplotlib 绘制这种类型的图表。我们将使用 Numpy 生成一些随机数据,并将其绘制成表面图。下面是创建 3D 表面图的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z)
plt.show()
Output:
3. 设置坐标轴
在创建 3D 表面图时,我们通常需要设置坐标轴的标签和范围,以便更好地展示数据。下面是如何设置坐标轴的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.set_zlim(-1, 1)
plt.show()
Output:
4. 绘制多个 3D 表面图
除了单个 3D 表面图之外,我们还可以绘制多个 3D 表面图,并将它们放在同一个图表中进行比较。下面是如何绘制多个 3D 表面图的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax2 = fig.add_subplot(122, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z1 = np.sin(np.sqrt(x**2 + y**2))
z2 = np.cos(np.sqrt(x**2 + y**2))
ax1.plot_surface(x, y, z1)
ax2.plot_surface(x, y, z2)
plt.show()
Output:
5. 添加颜色映射
为了更直观地展示数据,我们可以为 3D 表面图添加颜色映射,以便根据数据的数值来显示不同的颜色。下面是如何添加颜色映射的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
surf = ax.plot_surface(x, y, z, cmap='viridis')
fig.colorbar(surf)
plt.show()
Output:
6. 绘制网格线
在 3D 表面图中,我们可以添加网格线以更清晰地显示数据的分布情况。下面是如何绘制网格线的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z)
ax.grid(True)
plt.show()
Output:
7. 添加标签和标题
为了更好地说明图表的内容,我们可以添加标签和标题。下面是如何添加标签和标题的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ax.set_title('3D Surface Plot')
plt.show()
Output:
8. 自定义颜色和线型
除了默认的颜色和线型之外,我们还可以自定义 3D 表面图的颜色和线型,以满足特定的需求。下面是如何自定义颜色和线型的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z, color='r', linestyle='--')
plt.show()
Output:
9. 旋转和缩放
在查看 3D 表面图时,我们可以通过旋转和缩放来更好地观察数据的分布情况。下面是如何旋转和缩放 3D 表面图的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
ax.plot_surface(x, y, z)
ax.view_init(elev=30, azim=45)
ax.dist = 10
plt.show()
Output:
10. 保存图表
最后,我们可以将创建的 3D 表面图保存为图片文件,以便在其他地方使用。下面是如何保存图表的示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**s2 + y**2))
ax.plot_surface(x, y, z)
plt.savefig('surface_plot.png')
plt.show()
通过本文的介绍,我们学习了如何使用 Matplotlib 创建 3D 表面图,包括设置坐标轴、绘制多个表面图、添加颜色映射、绘制网格线、添加标签和标题、自定义颜色和线型、旋转和缩放以及保存图表。通过这些示例代码,我们可以更好地理解如何使用 Matplotlib 创建各种类型的 3D 表面图,并且可以根据自己的需求进行定制和调整,以满足不同的数据可视化需求。