Matplotlib详解

相关教程

【Python】Numpy详解
【Python】Pandas详解
【Python】Matplotlib详解

一、Matplotlib介绍

数据分析三剑客之一的Matplotlib,是Python中的图形绘图库,即:Python中最常用的数据可视化库之一。它提供了丰富的绘图功能,使得用户可以轻松地创建各种类型的图表和可视化数据。

二、Matplotlib的安装及导入

  • Matplotlib安装:在终端处输入以下命令

    pip install matplotlib
    
  • Matplotlib导入:大多数Matplotlib实用程序位于PyPlot子模块下,因此导入库格式:

    import matplotlib.pyplot as plt
    
  • 三、plot()函数介绍

    plot()函数的基本格式plt.plot(x, y, format_string, **kwargs)

  • xy:【必要参数】,分别是横坐标和纵坐标的数据,可以是列表、数组等可迭代对象。如果只提供y,则x默认是从0开始的整数序列。
  • format_string:【可选参数】,用于指定线条的格式,包括颜色、线型、标记等。例如,'r-'表示红色实线,'bo'表示蓝色圆点标记。
  • **kwargs:【可选参数】,用于更详细地设置线条的属性,如线宽、标记大小、颜色等。
  • 在实际应用中,常见的参数类型主要有以下几种【额外配置】:

  • color:设置线条颜色,默认为蓝色。

  • linestyle:设置线条样式,默认为实线。

  • marker:设置数据点的符号【标记】,默认为圆形

    注意:可以添加ms参数表示标记的大小,mec参数表示标记的颜色。

    如:plt.plot(x,y,marker=‘*’,ms=20,mec=“r”),【表示标记为星形,标记颜色为红色,标记大小为20】

  • linewidth:设置线条宽度,默认为1.0。

  • 1)标记参数

    一般用marker参数进行配置标记

    符号 标记类型
    “o” 圆形
    “*” 星形
    “.” 像素点
    “,” 像素点,比'.'更小
    “x” 叉号
    “X” 实心叉号
    “+” 加号
    “P” 实心加号
    “s” 正方形
    “D” 菱形
    “d” 瘦菱形
    “p” 五边形
    “h” 六边形
    “^” 上三角形
    “v” 下三角形
    “<” 左三角形
    “>” 右三角形
    “1” 下三角(另一种样式)
    “2” 上三角(另一种样式)
    “3” 左三角(另一种样式)
    “4” 右三角(另一种样式)
    “l” 垂直线
    “_” 水平线
    2)线颜色参数

    一般用color参数进行配置颜色

    符号 颜色
    “r” 红色
    “g” 绿色
    “b” 蓝色
    “y” 黄色
    “c” 青色
    “m” 品红色
    “k” 黑色
    “w” 白色
    2)线条样式参数

    一般用linestyle参数进行配置线条样式

    符号 线条类型
    “-” 实线
    “–” 虚线
    “-.” 点划线
    “:” 点线

    四、常用汇总

    4.1:函数总结

    Matplotlib在绘制图形时,其最常用的场景:绘制点绘制线

    方法名 说明
    plt.plot() 绘制线性图表
    plt.show() 显示图表
    plt.title() 设置总标题(图表名称)
    含有loc参数定位标题位置【标题】(left|right)
    plt.xlabel() 设置x轴名称【标签】
    plt.ylabel() 设置y轴名称【标签】
    plt.text() 添加文本内容
    如:plt.text(200,250,"y=x"),表明在(200,250)出添加y=x 标记
    plt.grid() 显示网格
    axis参数,其中axis='x’表明显示竖线,axis='y’表明显示横线
    plt.legend() 显示图列
    plt.xticks() 设置 x 轴刻度

    4.2:中文字的配置项

    可以通过以下【固定】配置来实现中文字的显示

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
    plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号
    

    字体说明

    中文字体 说明
    ‘SimHei’ 中文黑体
    ‘Kaiti’ 中文楷体
    ‘LiSu’ 中文隶书
    ‘FangSong’ 中文仿宋
    ‘YouYuan’ 中文幼圆
    STSong 华文宋体

    五、绘图操作

    1)直线图

    1.1:一般直线图

    此处,我们将绘制一条从(0,6)至(0,250)的线。

    # 1. 导入必要的库
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 2. 定义坐标数据
    # 从位置 (0,0) 至位置 (6,250) 处绘画一条线
    x=np.array([0,6]) # x轴:0~6
    y=np.array([0,250]) # y轴:0~250
    
    # 3. 绘制线
    plt.plot(x,y)
    
    # 4. 显示图表
    plt.show()
    

    1.2:直线图【额外配置】

    在上述直线的基础上进行一些额外的配置线颜色为红色,线条样式为点线,标记【点】为星型

    # 1. 导入必要的库
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 2. 定义坐标数据
    # 从位置 (0,0) 至位置 (6,250) 处绘画一条线
    x=np.array([0,6]) # x轴:0~6
    y=np.array([0,250]) # y轴:0~250
    
    # 3. 绘制线
    # 额外配置【可选】:颜色为红色,线条样式为点线,标记【点】为星型
    plt.plot(x,y,color="r",linestyle=":",marker="*")
    
    # 4. 显示图表
    plt.show()
    

    2)曲线图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 2. 定义坐标数据
    x=np.arange(-10,11) # x轴:从-10~10(不包含11)
    y= x**2 # y轴:关于x的二元一次函数
    
    # 3. 绘制线
    plt.plot(x,y)
    # 4. 显示图表
    plt.show()
    

    3)折线图

    3.1:一般折线图

    绘制折线图,先从位置(1,3)到(2,8),然后到(6,1),最后到(8,10)。

    # 导入必要的库
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 定义坐标数据
    x=np.array([1,2,6,8]) # x轴
    y=np.array([3,8,1,10]) # y轴
    
    plt.plot(x,y) # 绘制线
    plt.show() # 显示图表
    

    3.2:折线图【标题与标签】

    当我们需要显示中文标签时,需要添加:plt.rcParams['font.sans-serif'] = ['KaiTi']进行中文配置。

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif'] = ['KaiTi']  # 设置显示中文字体
    plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号
    
    # 定义坐标数据
    x=np.array([80,85,90,95,100,105,110,115,120])
    y=np.array([240,270,280,290,290,310,305,315,320])
    
    plt.title("运动数据",loc="left") # 设置总标题(左对齐)
    plt.xlabel("平均脉搏") # 设置x轴名称
    plt.ylabel("卡路里消耗量") # 设置y轴名称
    
    plt.plot(x,y) # 绘制线
    plt.show() # 显示图表
    

    4)无线图(点)【不推荐】

    注意:【不推荐】此处的用法,通常使用散点图进行表示。

    import matplotlib.pyplot as plt
    import numpy as np
    
    x=np.array([80,85,90,95,100,105,110,115,120])
    y=np.array([240,270,280,290,290,310,305,315,320])
    
    # 使用快捷字符串符号参数"o",表示“环”
    plt.plot(x,y,'o')
    plt.grid() # 显示网格
    plt.show()
    

    5)多表图

    5.1:基本写法

    通过subplot()函数,可以在一张图中绘制多个图。

    subplot()函数

    subplot()函数采用3个参数来描述图形的布局。

    基本格式subplot(nrows, ncols, index, **kwargs)

    参数讲解nrowsncols分别表示子图的【行数】和【列数】index表示子图的位置索引,从左上角开始,从左到右、从上到下依次计数。

    例如:subplot(2, 2, 1)表示在一个 2 行 2 列的子图布局中创建第一个子图。

    此处,我们绘制一个一行两列的多表图形,具体代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 1、plot1
    x=np.array([0,1,2,3])
    y=np.array([3,8,1,10])
    # 图有一行两列, 该子图是【第一个图】
    plt.subplot(1,2,1)
    plt.plot(x,y)
    
    # 2、plot2
    x=np.array([0,1,2,3])
    y=np.array([10,20,30,40])
    # 图有一行两列, 该子图是【第二个图】
    plt.subplot(1,2,2)
    plt.plot(x,y)
    
    plt.show() # 显示图表
    

    5.2:标题与大标题

    可以使用title()函数每个子图添加标题;使用suptitle()函数整个多表图行添加大标题

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
    plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号
    
    # 1、plot1
    x=np.array([0,1,2,3])
    y=np.array([3,8,1,10])
    # 图有一行两列, 该子图是【第一个图】
    plt.subplot(1,2,1)
    plt.plot(x,y)
    plt.title("跑步数据") # 显示子图标题
    
    # 2、plot2
    x=np.array([0,1,2,3])
    y=np.array([10,20,30,40])
    # 图有一行两列, 该子图是【第二个图】
    plt.subplot(1,2,2)
    plt.plot(x,y)
    plt.title("游泳数据") # 显示子图标题
    
    plt.suptitle("我的运动") # 显示大标题
    plt.show() # 显示图表
    

    6)散点图

    绘制散点图时,通常依赖plt.scatter()函数,该函数包含很多参数,具体如下:

  • s参数:点的大小
  • color|c参数:点的颜色,取值可以为[‘b’, ‘c’, ‘g’, ‘k’, ‘m’, ‘r’, ‘w’, ‘y’]
  • alpha参数:点的透明度,取值为0~1
  • marker参数:点的形状,默认状态下为“o”,常见的还有[‘v’, ‘>’, ‘<’, ‘*’, ‘s’, ‘p’, ‘h’, ‘x’, ‘+’]
  • import matplotlib.pyplot as plt
    import numpy as np
    
    # 定义坐标数据
    x=np.array([5,3,6,1,4,2,7,9,8,13])
    y=np.array([32,4,52,56,13,134,98,87,107,119])
    
    # 绘制散点图(颜色为蓝色,大小为50,透明度为0.5)
    plt.scatter(x,y,c="b",s=50,alpha=0.5)
    
    # 显示图表
    plt.show()
    

    7)柱状图

    我们一般通过plt.bar()函数来绘制柱状图。

    基本格式np.bar(x, y, width, bottom=None, *, align=‘center’, data=None, **kwargs)

    参数 说明
    x x轴的数据序列
    y y轴的数据序列
    color 柱状图填充的颜色
    edgecolor 图形边缘颜色
    width 柱状图的宽度(0~1)【默认0.8】,应用于垂直柱状图
    barth 柱状图的高度(0~1),应用于水平柱状图,类比修改垂直柱状图的宽度
    label 解释每个图形代表的含义
  • 一般的柱形图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 定义坐标数据
    x=np.array(['A','B','C','D'])
    y=np.array([23,9,4,17])
    
    # 绘制柱状图
    plt.bar(x,y)
    
    # 显示图表
    plt.show()
    

  • 柱状图头部添加数据

    import matplotlib.pyplot as plt
    import numpy as np
    
    x=np.array(['A','B','C','D'])
    y=np.array([23,9,4,17])
    
    bars=plt.bar(x,y)
    
    # 在每个柱子顶部添加数据【固定写法】
    for bar in bars:
        height = bar.get_height() # 获取柱子高度
        # 在柱子顶部添加文本
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    
    plt.show()
    

  • 并行柱状图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 1、定义两组数据的类别标签
    x = np.array(['A', 'B', 'C', 'D'])
    # 第一组数据
    y1 = np.array([23, 9, 4, 17])
    # 第二组数据
    y2 = np.array([15, 10, 8, 12])
    
    # 2、设置柱子宽度
    bar_width = 0.36
    # 3、设置两组柱子的位置偏移量
    index = np.arange(len(x))
    
    # 3、绘制柱子
    # 绘制第一组柱子
    bars1 = plt.bar(index, y1, width=bar_width, label='Group 1')
    # 绘制第二组柱子,通过调整位置实现并排
    bars2 = plt.bar(index + bar_width, y2, width=bar_width, label='Group 2')
    
    # 在柱子顶部添加数据【固定写法】
    # 针对第一组柱子
    for bar in bars1:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    # 针对第二组柱子
    for bar in bars2:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    
    # 4、添加轴标签(x轴)
    plt.xticks(index + bar_width / 2, x)
    # 显示图列
    plt.legend()
    
    plt.show()
    

  • 水平柱状图

    bar()函数修改为barh()函数,并将其中的width参数改为height参数

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 1、定义两组数据的类别标签
    x = np.array(['A', 'B', 'C', 'D'])
    y1 = np.array([23, 9, 4, 17]) # 第一组数据
    y2 = np.array([15, 10, 8, 12]) # 第二组数据
    
    # 2、设置柱子宽度
    bar_width = 0.36
    # 3、设置两组柱子的位置偏移量
    index = np.arange(len(x))
    
    # 3、绘制柱子
    # 绘制第一组柱子
    bars1 = plt.barh(index, y1, height=bar_width, label='Group 1')
    # 绘制第二组柱子,通过调整位置实现并排
    bars2 = plt.barh(index + bar_width, y2, height=bar_width, label='Group 2')
    
    # 4、添加轴标签(y轴)
    plt.yticks(index + bar_width / 2, x)
    # 显示图列
    plt.legend()
    
    plt.show()
    

  • 8)直方图

    在绘制直方图时,一般用plt.hist()函数来创造直方图。

    基本格式plt.hist(x, bins=bins, color=”b”, histtype=’bar’,label=’label’, rwidth =rwidth)

    具体各参数说明如下:

    参数 说明
    x 连续型数据的输入值
    color 柱体的颜色
    label 图例内容
    rwidth 柱体宽度
    histtype 柱体类型
    bins 用于确定柱体的个数或是柱体边缘范围

    具体写法如下

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 通过Numpy随机生成一个包含250个值的数组,其中值将集中在170,标准差为10
    x=np.random.normal(170,10,250)
    
    # 生成直方图
    plt.hist(x)
    
    # 显示图表
    plt.show()
    

    9)饼图

    一般用plt.pie()函数来创造饼图。

    基本格式plt.pie(size,explode,labels,autopct,startangle,shadow,color) 函数

    具体各参数说明如下:

    参数 说明
    size 各部分的百分比
    labels 每部分饼片的文本标签
    colors 设置每个柱体的颜色
    shadow 是否绘制饼片的阴影【True|False】
    startangle 起始角度,即:第一个饼片逆时针旋转的角度
    autopct 每部分饼片对应的数值百分比样式,固定形式:autopct="%1.1f%%"
    explode 分离程度,即:设置距离圆心的距离【可视化】
  • 一般饼图

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    plt.pie(size,labels=labels)
    
    plt.legend() # 图列
    plt.show() # 显示图表
    

  • 显示百分比样式饼图

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    # 起始角度为90度,显示百分比样式
    plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90)
    
    plt.legend() # 图列
    plt.show() # 显示图表
    

  • 强调某几部分饼片的可视性(explode)

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    # 起始角度为90度,显示百分比样式,添加阴影,分离程度【可视化】
    # 分离程度【可视化】:0表示不分离,0.2表示一定的分离
    plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90,
            shadow=True, explode = [0.2,0,0.2,0])
    
    plt.legend() # 图列
    plt.show() # 显示图表
    

  • 作者:frimiku

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】Matplotlib详解

    发表回复