Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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:

Matplotlib 3D Surface Plots

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 表面图,并且可以根据自己的需求进行定制和调整,以满足不同的数据可视化需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程