• Matplotlib光速入门-从安装到常用实战


    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

    在这里插入图片描述

    简介


    Matplotlib是Python一个强大的绘图库,搭配NumPy库的使用,可以满足绝大部分的绘图需求,各种你能想到的图表基本都支持,使用代码即可进行绘制,如果画不出来那一定是你的问题(doge)。

    本文主要参考Matplotlib文档,归纳总结Matplotlib常用方法,只举例了部分,所有函数和相关参数不能遍举,更多可参考Matplotlib文档

    安装


    如果使用pip安装:

    pip install matplotlib
    
    • 1

    如果使用conda安装:

    conda install matplotlib
    
    • 1

    如果使用的是Pycham,可以直接打开File->settings->Project:->Python Interpreter中安装库。
    在这里插入图片描述
    搜索matplotlib,点击安装即可。

    在这里插入图片描述
    在这里插入图片描述

    实战

    画框


    fig是Figure缩写,即外框,可以包含多个内框。ax是Axes缩写,即内框,里面可以画各种图。plt是导入Matplotlib库时的重命名缩写,可以理解为一整张画布,直接添加即可,但细节修改用ax更好。
    两种方法都可,比如以下代码是等价的:

    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()  # 创建一个外框(默认含一个内框),返回两个参数
    ax.plot([1, 2], [1, 2])  # 在内框上画一条直线,点(1,1)到(2,2)
    plt.show()  # 显示绘图
    
    • 1
    • 2
    • 3
    • 4
    import matplotlib.pyplot as plt
    plt.plot([1, 2], [1, 2])  # 分别是x和y
    plt.show()
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    如一张画布上多个画框:

    from matplotlib import pyplot as plt
    
    # subplot三个参数:垂直方向画几张图,水平方向画几张图,当前是第几张图
    plt.subplot(2, 2, 1)  # 即划分1×2个画框,当前是第1个
    plt.title("1")
    plt.subplot(2, 2, 2)  # 当前为第2个
    plt.title("2")
    plt.subplot(2, 2, 3)  # 当前为第3个
    plt.title("3")
    plt.subplot(2, 2, 4)  # 当前为第4个
    plt.title("4")
    plt.subplots_adjust(wspace=0.5, hspace=0.5)  # 调整间距
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    引用官网的一张图,除了数据外,一张图表还包含了很多元素,如标题(Title)、说明(Legend)、刻度(Minor tick)、刻度名(Minor tick label)、网格(Grid)、标记(Marker)、x轴y轴等。
    在这里插入图片描述

    相关元素的设置可以参考上图或文档,举个栗子:

    import numpy as np
    from matplotlib import pyplot as plt
    
    plt.title("我的图表")  # 设置图表名
    plt.xlabel("X轴[mm]")  # 设置x轴名
    plt.ylabel("Y轴[cm]")  # 设置y轴名
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字符编码
    plt.rcParams['axes.unicode_minus'] = False  # 编码正常显示负号
    plt.xticks(np.arange(0, 60, 5))  # x刻度,从0-60,间隔5
    plt.yticks(np.arange(0, 15, 1))  # y刻度,从0-15,间隔1
    # x和y的值,即连接点(10,2)、(25,7)、(50,13),设置颜色等可选参数
    plt.plot([10, 25, 50], [2, 7, 13], label="折线", color="#FF0000")
    plt.legend()  # 显示说明
    plt.grid()  # 显示网格
    plt.show()  # 显示绘图
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

    线图


    使用plot()函数。

    import numpy as np
    from matplotlib import pyplot as plt
    
    #  ------直线------
    plt.plot([0, 10], [0, 5], label="直线", linewidth="3")  # 线宽设置3
    #  ------抛物线------
    x = np.linspace(0, 10, 100)  # 1-10均匀序列
    plt.plot(x, 0.05*x*x, label="抛物线")
    #  ------三角函数------
    plt.plot(x, np.sin(x), label="正弦曲线")
    plt.plot(x, np.cos(x), label="余弦曲线")
    #  其他的举一反三,给出函数和定义域即可
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.legend()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    各种线条格式:

    import numpy as np
    from matplotlib import pyplot as plt
    
    x = np.linspace(1, 10, 30)
    plt.plot(x, x, '-')
    plt.plot(x, x+1, '--')
    plt.plot(x, x+2, '-.')
    plt.plot(x, x+3, 'o')
    plt.plot(x, x+4, ',')
    plt.plot(x, x+5, 'x')
    plt.plot(x, x+6, 'd')
    plt.plot(x, x+7, '<')
    plt.plot(x, x+8, '>')
    plt.plot(x, x+9, 'v')
    plt.plot(x, x+10, '+')
    plt.plot(x, x+11, '*')
    plt.plot(x, x+12, '-')
    plt.plot(x, x+13, 'h')
    plt.plot(x, x+14, '|')
    plt.plot(x, x+15, '1')
    plt.plot(x, x+16, '2')
    plt.plot(x, x+17, '3')
    plt.plot(x, x+18, '4')
    plt.plot(x, x+19, '8')
    
    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

    在这里插入图片描述

    散点图


    使用scatter()函数。

    import numpy as np
    from matplotlib import pyplot as plt
    plt.figure(figsize=(10, 5))
    # ------均匀分布------
    plt.subplot(1, 2, 1)
    plt.title("均匀分布")
    n = 800  # 样本数
    x = np.random.rand(n)  # 随机坐标点
    y = np.random.rand(n)
    colors = np.random.rand(n)  # 随机颜色
    size = np.random.rand(n)*100  # 随机大小
    plt.scatter(x, y, c=colors, s=size, alpha=0.3)  # alpha是透明度
    # ------正态分布------
    plt.subplot(1, 2, 2)  # 第二个画框
    plt.title("正态分布")
    x = np.random.randn(n)
    y = np.random.randn(n)
    plt.scatter(x, y, c=colors, s=size, alpha=0.3)
    
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    柱状图


    使用bar()函数。

    import numpy as np
    from matplotlib import pyplot as plt
    plt.figure(figsize=(10, 5))
    # ------图1------
    plt.subplot(1, 2, 1)
    x = np.arange(8)  # 0-7
    y = np.random.randint(-3, 5, 8)  # -3到5随机8个数
    plt.bar(x, y, width=0.6)
    plt.title('图2')
    plt.axhline(0)  # 水平线
    # ------图2------
    plt.subplot(1, 2, 2)
    x = np.arange(3)  # 1-3
    width = 0.2  # 设置柱宽
    plt.bar(x, [4, 6, 2], color='green', width=width, label="A")
    plt.bar([i+width for i in x], [3, 7, 4], color='blue', width=width, label="B")
    plt.bar([i+2*width for i in x], [5, 6, 4], color='red', width=width, label="C")
    plt.xticks([i+width for i in x], ["2020", "2021", "2022"])  # 设置刻度
    plt.title('图2')
    
    plt.legend()
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    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

    在这里插入图片描述
    还可以使用hist()函数。

    import numpy as np
    from matplotlib import pyplot as plt
    
    x1 = np.random.normal(2.5, 0.5, 1000)  # 期望2.5,标准差0.5,输出大小1000
    x2 = np.random.normal(5, 2, 1000)
    x3 = np.random.normal(7.5, 1, 1000)
    plt.hist(x1, bins=100, alpha=0.5, label="A")  # 100个数据,透明的0.5,标签A
    plt.hist(x2, bins=100, alpha=0.5, label="B")
    plt.hist(x3, bins=100, alpha=0.5, label="C")
    
    plt.legend()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    饼状图


    使用pie()函数。

    from matplotlib import pyplot as plt
    
    # explode分裂,autopct百分比格式
    plt.pie([0.4, 0.6], labels=["A", "B"], explode=(0, 0.05), autopct='%0.0f%%')
    plt.legend()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    等高线图


    使用contourf函数。

    import numpy as np
    from matplotlib import pyplot as plt
    # ------数据------
    x = np.linspace(-3, 3, 256)  # -3到3等差256个点
    y = np.linspace(-3, 3, 256)
    X, Y = np.meshgrid(x, y)  # 计算x和y的相交点
    Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)  # 计算Z的坐标
    levels = np.linspace(Z.min(), Z.max(), 7)
    # ------图1------
    plt.figure(figsize=(10, 5))
    plt.subplot(1, 2, 1)
    plt.contour(X, Y, Z)
    # ------图2------
    plt.subplot(1, 2, 2)
    plt.contourf(X, Y, Z)
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    原创不易,请勿转载本不富裕的访问量雪上加霜
    博主首页:https://wzlodq.blog.csdn.net/
    来都来了,不评论两句吗👀
    如果文章对你有帮助,记得一键三连❤

  • 相关阅读:
    【C++进阶(八)】C++继承深度剖析
    客服开场白话术
    3G网络关闭,4G还会远吗?
    GBase8s物理日志
    我的创作纪念日———C/C++之动态内存管理
    业主方怎么管理固定资产
    mac解决//go:linkname must refer to declared function or variable
    SpringBoot+Mybatis-Plus+Redis+Vue在线博客系统,叮当外卖单体项目,Python爬虫可视化,面试,扫盲链接
    Nginx平滑升级的详细操作方法
    c++学习:继承
  • 原文地址:https://blog.csdn.net/qq_45034708/article/details/126789198