Logo

郎哥编程

理解Matplotlib

2021-02-19 67

matplotlib是图形绘制库,使用matplotlib可以方便的绘制函数图形、以及直方图、条形图、散点图等统计图形。

1、安装Matplotlib

进入操作系统的命令行窗口,在命令行窗口输入并执行下面的命令:

python -m pip install -U pip setuptools
python -m pip install -U matplotlib

上述命令可安装最新的matplotlib版本。

2、  Matplotlib的几个概念

matplotlib是图形绘制库,学习matplotlib最好的方法就是一边学习一边实践,现在就从最简单的绘制函数图像开始。

绘制函数图像之前,先了解几个matplotlib概念。

pyplot(绘图模块)

pyplot是matplotlib库的核心模块,主要绘制二维图形,将线、图形、文本等绘制到Figure(画布)。

Figure(画布)

Figure可以理解为画布,也就是绘图区域。在画布上有坐标轴,一个画布允许有多个坐标轴,画布上还有标题、绘图对象、交互组件等。

例1  创建Figure

案例代码见课程资源(unit3\case01.py)

# 导入pyplot模块
import matplotlib.pyplot as plt
# 创建没有轴的figure
fig = plt.figure()
# 设置figure的标题
fig.suptitle('No axes on this figure')
# 创建具有2X2轴的figure
fig, ax_lst = plt.subplots(2, 2)
plt.show()

代码解读

pyplot模块的figure()函数创建一个空的画布,画布上没有轴,函数返回figure对象。suptitle()是figure对象的方法,用于设置画布标题。pyplot模块的subplots ()函数创建具有多个轴的画布,当然也可以只有一个轴,可以把每一个轴作为画布上的一个子图开看待。pyplot模块的show()函数会将画布显示到窗口。

例1代码执行后,程序会显示两个画布,在后面的内容中,画布也称为绘图窗口。

04.png

05.png

Axes(轴空间)

Axes(轴空间)是Figure(画布)上的绘图空间,在Figure(画布)绘图时,可以把Figure(画布)分成多个绘图空间,例1就创建了具有4个绘图空间的Figure(画布)。Axes(轴空间)可以包含多个轴。

Axis(轴)

Axis(轴)是绘图用的坐标系。

绘图数据

matplotlib的所有绘图函数都以numpy数组,或者numpy的masked数组(掩码数组)为输入数据。

pyplot是Matplotlib的绘图模块,使用Matplotlib绘制图形都要用到pyplot模块,该模块的所有函数都会在Axes(轴空间)和Axis(轴)内绘图,若开发者没有创建Axes(轴空间)和Axis(轴), pyplot会自动创建它们。例如:在例2中,pyplot模块会默认创建Axes(轴空间)和Axis(轴),然后调用绘图函数在默认轴上绘制直线,设置Axes(轴空间)标题,设置绘图标签并添加图例。

例2 使用pyplot绘制图形

案例代码见课程资源(unit3\case02.py)

# 导入pyplot模块
import matplotlib.pyplot as plt
# 导入numpy模块
import numpy as np
 
# 在0~2范围内均匀创建100个数据点
x = np.linspace(0, 2, 100)
 
# plot为绘图函数
# 绘制直线y=x
plt.plot(x, x, label='linear')
# 绘制二次函数y=x^2
plt.plot(x, x**2, label='quadratic')
# 绘制三次函数y=x^3
plt.plot(x, x**3, label='cubic')
 
# 设置X轴标签
plt.xlabel('x label')
# 设置Y轴标签
plt.ylabel('y label')
 
# 设置绘图标题
plt.title("Simple Plot")
 
# 显示图例
plt.legend()
 
# 显示绘图窗口
plt.show()

3、 如何使用Matplotlib绘图

使用Matplotlib绘图,需要导入numpy库和pyplot模块,绘图程序的顶部导入通常是:

import matplotlib.pyplot as plt
import numpy as np

然后进行绘图操作。例如:调用np的函数创建绘图数据,调用pyplot模块的函数创建Figure(画布)、Axes(轴空间),调用pyplot模块的绘图函数绘制线条、文本等内容:

x = np.arange(0, 10, 0.2)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

绘图案例代码见例2。

在一些情况下,绘图代码需要重复使用,只是绘制不同的数据集,可以参照下面的代码编写绘图通用函数:

def my_plotter(ax, data1, data2, param_dict):
    """
    通用绘图函数
 
    参数
    ----------
    ax : Axes(轴空间)
        绘图图形的轴空间
 
    data1 : array
       二维坐标系的X数据
 
    data2 : array
       二维坐标系的Y数据
 
    param_dict : dict
       传入ax.plot的关键字参数
 
    Returns
    -------
    out : list
        返回绘图对象列表
    """
    out = ax.plot(data1, data2, **param_dict)
    return out

调用通用绘图函数的代码样例如下:

# 创建绘图数据
data1, data2, data3, data4 = np.random.randn(4, 100)
# 创建Figure(画布)、Axes(轴空间)
fig, ax = plt.subplots(1, 1)
# 调用绘图函数
my_plotter(ax, data1, data2, {'marker': 'x'})

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论