Matplotlib---3D图

本文介绍了如何利用Python的matplotlib库和numpy库创建3D图形,包括3D折线图、散点图和条形图。主要涉及numpy的linspace函数生成等间隔序列,以及matplotlib的Axes3D对象来构建三维坐标系,并调整观察视角和图形样式。
摘要由CSDN通过智能技术生成

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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月七꧁ ꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值