1. 3D图
# 3D引擎
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(8, 5))
x = np.linspace(0, 100, 400)
y = np.sin(x)
z = np.cos(x)
# 三维折线图
axes = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(axes)
axes.plot(x,y,z)
plt.savefig('images/6-1.png')
np.linspace()函数是NumPy库中的一个函数,用于生成等间隔的数值序列。
使用格式:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
- start:序列的起始值。
- stop:序列的结束值。
- num:要生成的等间隔样本数量,默认为50。
- endpoint:布尔值,控制是否包含stop值,默认为True,即包含。
- retstep:布尔值,控制是否返回样本之间的步长值,默认为False,即不返回。
- dtype:返回数组的数据类型,默认为None,即与输入参数的数据类型一致。
`axes = Axes3D(fig, auto_add_to_figure=False)`是一种创建`Axes3D`对象的方式,其中`fig`是
一个已经创建好的`Figure`对象。
参数说明:
- `fig`: 一个已经创建好的`Figure`对象,用于在该图形上创建`Axes3D`对象。
- `auto_add_to_figure`: 可选参数,默认为`True`。当设置为`True`时,创建的`Axes3D`对象会自动
添加到`fig`中。当设置为`False`时,需要手动将该对象添加到`fig`中。
使用这种方式创建`Axes3D`对象可以灵活地控制对象的添加和布局。如果`auto_add_to_figure`参
数设为`True`,那么创建对象后它将自动添加到`fig`中,而不需要额外的步骤。如果设为`False`,
则需要手动将对象添加到`fig`中。
例如:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建一个空的Figure对象
fig = plt.figure()
# 不自动将创建的Axes3D对象添加到Figure中
axes = Axes3D(fig, auto_add_to_figure=False)
# 将创建的Axes3D对象手动添加到Figure中
fig.add_axes(axes)
在这个例子中,通过将`auto_add_to_figure`参数设置为`False`来创建了一个空的`Axes3D`对
象`axes`,然后通过`fig.add_axes()`方法手动将其添加到`fig`中。这样就可以更灵活地控制
`Axes3D`对象的创建和添加。
在Matplotlib库中,`Axes3D`函数用于创建一个三维坐标系。
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
- `fig = plt.figure()`:创建一个新的图像窗口。
- `ax = fig.add_subplot(111, projection='3d')`:在图像窗口中添加一个子图,并将其设置为三维坐
标系。
参数说明:
- `projection='3d'`:指定子图的投影方式为三维('3d')。这个参数告诉Matplotlib将图像显示为三维
形式。
一旦你创建了一个`Axes3D`对象,你就可以使用它的方法和属性来绘制和自定义三维图形。
常用的方法和属性包括(但不限于):
- `scatter(x, y, z, ...)`: 绘制三维散点图。
- `x`、`y`、`z`:表示数据点的x、y、z坐标值。
- `...`:其他用于自定义样式的参数,例如点的大小、颜色等。
- `plot(x, y, z, ...)`: 绘制三维线图。
- `x`、`y`、`z`:表示数据点的x、y、z坐标值。
- `...`:其他用于自定义样式的参数,例如线的类型、颜色等。
- `plot_surface(X, Y, Z, ...)`: 绘制三维曲面图。
- `X`、`Y`、`Z`:表示网格点的x、y、z坐标值。
- `...`:其他用于自定义样式的参数,例如曲面的颜色、透明度等。
- `set_xlabel(label)`, `set_ylabel(label)`, `set_zlabel(label)`: 设置x、y、z坐标轴的标签。
- `label`:坐标轴的标签文本。
- `set_title(title)`: 设置子图的标题。
- `title`:子图的标题文本。
- `set_xlim(left, right)`, `set_ylim(bottom, top)`, `set_zlim(bottom, top)`: 设置x、y、z坐标轴的取值范围(最小值和最大值)。
- `left`, `right`, `bottom`, `top`:坐标轴的取值范围。
- `view_init(elev, azim)`: 设置观察视角的高度角和方位角。
- `elev`:观察视角的高度角(垂直旋转角度),单位为度。
- `azim`:观察视角的方位角(水平旋转角度),单位为度。
fig = plt.figure(figsize=(8, 5))
# 三维折线图
axes = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(axes)
# 三维散点图
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
axes.scatter(x, y, z,
color='red',
s=100)
plt.savefig('images/6-2.png')
fig = plt.figure(figsize=(8, 5))
# 二维变成了三维
axes = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(axes)
x = np.arange(1, 5)
for m in x:
axes.bar(
np.arange(4),
np.random.randint(10, 100, size=4),
zs=m, # 在x轴中的第几个
zdir='x', # 在哪个方向上排列
alpha=0.7, # 透明度
width=0.5 # 宽度
)
axes.set_xlabel('X轴', fontsize=18, color='red')
axes.set_ylabel('Y轴', fontsize=18, color='blue')
axes.set_zlabel('Z轴', fontsize=18, color='green')
plt.savefig('images/6-3.png')
plt.show()