• Python 数据可视化:Matplotlib库的使用


    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
    🍎个人主页:小嗷犬的博客
    🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
    🥭本文内容:Python 数据可视化:Matplotlib库的使用



    Matplotlib库简介

    Matplotlib是一个第三方python 2D绘图库,利用它可以画出许多高质量的图像。只需几行代码即可生成直方图,条形图,饼图,散点图等。

    Matplotlib库的名字来源于MATLAB,模仿MATLAB构建,语法也十分相似。


    Matplotlib库安装

    因为Matplotlib库是第三方库,所以我们要先进行安装。

    我们可以使用pip命令来直接安装:

    pip install matplotlib
    
    • 1

    但这里我推荐直接安装Anaconda,一个开源的 Python 发行版本,其包含了 Python、NumPy、Matplotlib 等180多个科学包及其依赖项。
    官网地址:https://www.anaconda.com/


    pyplot

    pyplotMatplotlib库中最基础的模块,本篇文章主要展示pyplot的使用。

    我们平常使用时通常以如下形式导入库:

    import matplotlib.pyplot as plt
    
    • 1

    基本绘图流程

    使用Matplotlib库绘图一般遵循以下流程:

    1. 创建画布(可选)
    2. 创建子图并选定子图(可选)
    3. 为图像添加标题、设定图像参数
    4. 绘制图像
    5. 添加图例
    6. 保存图像或显示图像

    常用方法

    创建画布

    使用plt.figure()方法可以创建一块画布,可以通过参数指定它的大小和背景颜色:

    plt.figure(figsize=None, facecolor=None)
    
    • 1
    创建子图并选定子图

    使用plt.subplot()方法可以在全局绘图区域中创建一个子图,它的语法格式如下:

    plt.subplot(nrows, ncols, index, **kwargs)
    plt.subplot(pos, **kwargs)
    plt.subplot(**kwargs)
    plt.subplot(ax)
    
    • 1
    • 2
    • 3
    • 4

    一共4种创建方式:

    • 第一种是用3个参数,分别代表网格的行数 nrows,列数 ncols,索引号index。它们都是位置参数。
    • 第二种是用一个3位数的整数,每一位分别代表网格的行数,列数 ,索引号。pos也是是位置参数。
    • 第三种会用默认值创建一个子图。
    • 第四种则以一个axes为参数,创建子图。

    除此之外,我们还可以用plt.axes(rect,axisbg='w')方法创建一个坐标系风格的子图:

    plt.axes(rect,axisbg='w')
    
    • 1

    rect参数指定位置,用axisbg参数指定背景颜色。

    为图像添加标题、设定图像参数

    首先,Matplotlib库默认是不支持中文的,使用中文会产生乱码,如果要使用中文可以在导入库后加入下列两行代码来临时修改配置文件:

    plt.rcParams["font.sans-serif"]=["SimHei"] # 设置字体为黑体
    plt.rcParams["axes.unicode_minus"]=False # 防止负号乱码
    
    • 1
    • 2

    我们可以用plt.title()方法为子图添加标题,也可以使用plt.suptitle()方法为当前绘图区域添加中心标题。

    使用plt.xlabel(s)plt.ylabel(s)方法可以分别设置当前x轴和y轴的标签。

    使用plt.grid()方法可以设置图表中的网格线:

    plt.grid(b=None, which='major', axis='both', **kwargs)
    
    • 1

    参数说明:

    • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
    • which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
    • axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
    • **kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=‘-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

    图像参数还有许多,更多请参见官方手册:https://matplotlib.org/

    绘制图像

    Matplotlib库可以绘制许多类型的图,这里以绘制曲线图为例。

    使用plt.plot()方法可以绘制曲线图,语法结构如下:

    plt.plot(x, y, format_string, **kwargs)
    
    • 1

    参数说明:

    • x:可选,表示X轴数据,类型为列表或数组。
    • y:表示Y轴数据,类型为列表或数组。
    • format_string:可选,由颜色字符、线条字符、标记字符组成。
    • **kwargs:多组(x,y,format_string),绘制多条曲线。

    其中常用颜色字符有:

    颜色字符颜色
    'b'蓝色
    'g'绿色
    'r'
    'c'青色
    'm'品红
    'y'黄色
    'k'
    'w'白色
    '#008000'RGB某颜色
    '0.8'灰度值

    常用线条字符有:

    线条字符线条
    '‐'实线
    '‐‐'破折线
    '‐.'点划线
    ':'虚线
    ''' '无线条

    常用标记字符有:

    标记字符标记
    "."
    ","像素点
    "o"实心圆
    "v"下三角
    "^"上三角
    "<"左三角
    ">"右三角
    "1"下三叉
    "2"上三叉
    "3"左三叉
    "4"右三叉
    "8"八角形
    "s"正方形
    "p"五边形
    "P"加号(加粗)
    "*"星号
    "h"竖六边形
    "H"横六边形
    "+"加号
    "x"乘号 x
    "X"乘号(加粗)
    "D"菱形
    "d"瘦菱形
    "|"竖线
    "_"横线
    '$...$'渲染指定的字符。例如 "$f$" 以字母 f 为标记。

    除了常用的曲线图外,Matplotlib库还可以绘制许多其他种类的图:

    函数说明
    plt.plot()绘制折线图
    plt.scatter()绘制散点图
    plt.bar()绘制柱状图
    plt.barh()绘制横向柱状图
    plt.stem()绘制火柴图
    plt.step()绘制阶梯图
    plt.hist()绘制直方图
    plt.boxplot()绘制箱线图
    plt.errorbar()绘制误差条图
    plt.violinplot()绘制小提琴图
    plt.eventplot()绘制尖峰栅格图
    plt.hist2d()绘制二维直方图/散点密度图
    plt.hexbin()绘制Hexbin散点图
    plt.pie()绘制扇形图

    具体用法和参数,请参见官方手册:https://matplotlib.org/

    添加图例

    我们可以用plt.legend()方法为子图添加图例,也可以使用plt.figlegend()方法为全局绘图区域添加图例,传入一个列表参数来给每条线命名。

    保存图像或显示图像

    使用plt.savefig()方法可以保存当前图像,参数为文件保存路径及文件名。

    使用plt.show()方法可以显示当前图像。


    代码实例

    用我们所学的方法绘制一张曲线图吧:

    import matplotlib.pyplot as plt
    plt.rcParams["font.sans-serif"]=["SimHei"] # 设置字体为黑体
    plt.rcParams["axes.unicode_minus"]=False # 防止负号乱码
    
    plt.figure(figsize=(16, 9))
    plt.suptitle("图表")
    
    f1 = lambda x:x**0.5
    f2 = lambda x:x
    f3 = lambda x:x**2
    
    x = list(range(0,6))
    y1 = [f1(i) for i in x]
    y2 = [f2(i) for i in x]
    y3 = [f3(i) for i in x]
    
    plt.subplot(221)
    plt.plot(x,y1,'b-v')
    plt.title("y=√x")
    
    plt.subplot(222)
    plt.plot(x,y2,'g--1')
    plt.title("y=x")
    
    plt.subplot(223)
    plt.plot(x,y3,'r-.s')
    plt.title("y=x^2")
    
    plt.subplot(224)
    plt.plot(x,y1,'b-v')
    plt.plot(x,y2,'g--1')
    plt.plot(x,y3,'r-.s')
    plt.title("对比图")
    plt.legend(["√x","x","x^2"])
    
    plt.figlegend(["√x","x","x^2"])
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    效果图:
    图表

  • 相关阅读:
    深入理解Java消息中间件-消息的可靠性
    告别繁琐粘贴,CleanClip Mac 版,让复制粘贴变得简单快捷!粘贴队列功能太强大了!
    Java 后端实现鼠标滚动,点击事件
    矩阵论理论知识(三)特殊的线性空间
    redux、mobx
    群面经验笔记本(持续更新ing...)
    Databend 开源周报第 111 期
    Vue+SpringBoot打造考研专业课程管理系统
    六张图详解LinkedList 源码解析
    一篇博客带你学会MyBatis
  • 原文地址:https://blog.csdn.net/qq_63585949/article/details/126723005