【基础】利用Matplotlib的3D绘图功能进行三维数据的可视化和交互。
发布时间: 2024-06-24 15:10:04 阅读量: 140 订阅数: 126
![python科学计算合集](https://ask.qcloudimg.com/http-save/8934644/fd9a445a07f11c8608626cd74fa59be1.png)
# 2.1.1 基本图形的创建
Matplotlib 提供了一系列函数来创建基本的三维图形,包括散点图、折线图、表面图和等值面图。这些函数通常采用类似的语法,需要提供数据点坐标作为输入。
例如,要创建一个三维散点图,可以使用 `scatter3D` 函数:
```python
import matplotlib.pyplot as plt
# 定义数据点坐标
x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, 10]
z = [11, 12, 13, 14, 15]
# 创建散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter3D(x, y, z)
# 显示图形
plt.show()
```
# 2. Matplotlib 3D 绘图高级技巧
本节将深入探讨 Matplotlib 3D 绘图的高级技巧,包括图形创建和修改、交互操作、保存和导出。
### 2.1 3D 图形的创建和修改
#### 2.1.1 基本图形的创建
在 Matplotlib 中创建 3D 图形需要使用 `Axes3D` 类。它提供了创建各种 3D 图形的函数,包括散点图、折线图、曲面图和等值面图。
```python
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建一个 3D 图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 创建一个 3D 散点图
x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, 10]
z = [11, 12, 13, 14, 15]
ax.scatter(x, y, z)
plt.show()
```
**代码逻辑分析:**
* `fig = plt.figure()`:创建一个新的图形。
* `ax = fig.add_subplot(111, projection='3d')`:在图形中添加一个 3D 子图。
* `ax.scatter(x, y, z)`:创建并绘制一个 3D 散点图,其中 `x`、`y` 和 `z` 是数据点坐标的列表。
* `plt.show()`:显示图形。
#### 2.1.2 图形属性的自定义
创建图形后,可以自定义其属性,例如颜色、线宽、标记大小和视角。
```python
# 自定义图形属性
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('3D 散点图')
ax.scatter(x, y, z, c='r', marker='o', s=100)
```
**代码逻辑分析:**
* `ax.set_xlabel('X 轴')`:设置 X 轴标签。
* `ax.set_ylabel('Y 轴')`:设置 Y 轴标签。
* `ax.set_zlabel('Z 轴')`:设置 Z 轴标签。
* `ax.set_title('3D 散点图')`:设置图形标题。
* `ax.scatter(x, y, z, c='r', marker='o', s=100)`:重新绘制散点图,设置颜色为红色 (`c='r'`)、标记形状为圆形 (`marker='o'`)、标记大小为 100 (`s=100`)。
### 2.2 3D 图形的交互操作
#### 2.2.1 视图的旋转和缩放
Matplotlib 提供了交互式操作 3D 图形的能力,例如旋转和缩放视图。
```python
# 启用交互模式
plt.ion()
# 旋转视图
ax.view_init(elev=10, azim=30)
# 缩放视图
ax.dist = 10
```
**代码逻辑分析:**
* `plt.ion()`:启用交互模式,允许在运行时进行交互。
* `ax.view_init(elev=10, azim=30)`:设置视图的仰角 (`elev`) 和方位角 (`azim`)。
* `ax.dist = 10`:设置视图的距离。
#### 2.2.2 数据点的拾取和操作
还可以拾取和操作 3D 图形中的数据点。
```python
# 拾取数据点
picked_point = plt.ginput(1)
# 操作数据点
picked_point[0][0] += 1
ax.scatter(x, y, z)
```
**代码逻辑分析:**
* `picked_point = plt.ginput(1)`:拾取一个数据点,并将其坐标存储在 `picked_point` 中。
* `picked_point[0][0] += 1`:将拾取的数据点的 X 坐标增加 1。
* `ax.scatter(x, y, z)`:重新绘制散点图,显示更新后的数据点。
### 2.3 3D 图形的保存和导出
#### 2.3.1 图形文件的保存
创建的 3D 图形可以保存为各种文件格式,例如 PNG、JPEG 和 PDF。
```python
# 保存图形为 PNG 文件
plt.savefig('3d_scatter.png')
# 保存图形为 PDF 文件
plt.savefig('3d_scatter.pdf')
```
**代码逻辑分析:**
* `plt.savefig('3d_scatter.png')`:将图形保存为 PNG 文件。
* `plt.savefig('3d_scatter.pdf')`:将图形保存为 PDF 文件。
#### 2.3.2 图形数据的导出
除了保存图形文件外,还可以导出图形数据,例如数据点坐标和属性。
```python
# 导出数据点坐标
x_data, y_data, z_data = ax.get_data()
# 导出图形属性
title = ax.get_ti
```
0
0