使用Matplotlib绘制数据处理图表

文章目录

  • 1. Matplotlib 简介
  • 2. 安装
  • 3. Matplotlib Pyplot
  • 4. 绘制图表
  • 1. 折线图
  • 2. 散点图
  • 3. 柱状图
  • 4. 饼图
  • 5. 直方图
  • 5. 中文显示
  • 1. Matplotlib 简介

    Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

    Matplotlib 可以用来绘制各种静态,动态,交互式的图表。

    Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。

    Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。

    2. 安装

    升级 pip:

    python3 -m pip install -U pip
    

    安装 matplotlib 库:

    python3 -m pip install -U matplotlib
    

    安装完成后,我们就可以通过 import 来导入 matplotlib 库:

    import matplotlib
    
    print(matplotlib.__version__)
    

    image-20240713135518711

    3. Matplotlib Pyplot

    Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。

    Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。

    Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。

    使用的时候,我们可以使用 import 导入 pyplot 库,并设置一个别名 plt

    import matplotlib.pyplot as plt
    

    这样我们就可以使用 plt 来引用 Pyplot 包的方法。

    以下是一些常用的 pyplot 函数:

  • plot():用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图
  • imshow():用于绘制图像
  • subplots():用于创建子图
  • 4. 绘制图表

    1. 折线图

    import  matplotlib.pyplot as plt
    #绘制简单的图表
    input_values = [1,2,3,4,5]
    squares = [1,4,9,16,25]
    plt.plot(input_values,squares,linewidth=1)
    plt.show()
    

    image-20240713140220406

    绘制过程中,我们可以自定义线的样式,包括线的类型、颜色和大小等

    1.线的类型可以使用 linestyle 参数来定义,简写为 ls

    类型 简写 说明
    ‘solid’ (默认) ‘-’ 实线
    ‘dotted’ ‘:’ 点虚线
    ‘dashed’ ‘–’ 破折线
    ‘dashdot’ ‘-.’ 点划线
    ‘None’ ‘’ 或 ’ ’ 不画线
    import matplotlib.pyplot as plt
    import numpy as np
    
    ypoints = np.array([6, 2, 13, 10])
    
    plt.plot(ypoints, linestyle = 'dotted')
    plt.show()
    

    2.线的颜色可以使用 color 参数来定义,简写为 c

    颜色标记 描述
    ‘r’ 红色
    ‘g’ 绿色
    ‘b’ 蓝色
    ‘c’ 青色
    ‘m’ 品红
    ‘y’ 黄色
    ‘k’ 黑色
    ‘w’ 白色

    这里是基础的简单颜色,可以自定义颜色,查一下html颜色值即可

    import matplotlib.pyplot as plt
    import numpy as np
    
    ypoints = np.array([6, 2, 13, 10])
    
    plt.plot(ypoints, color = 'r')
    plt.show()
    

    3.线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:12.05.67 等。

    import matplotlib.pyplot as plt
    import numpy as np
    
    ypoints = np.array([6, 2, 13, 10])
    
    plt.plot(ypoints, linewidth = '12.5')
    plt.show()
    

    4.多条线的绘制

    plot() 方法中可以包含多对 x,y 值来绘制多条线。

    import matplotlib.pyplot as plt
    import numpy as np
    
    y1 = np.array([3, 7, 5, 9])
    y2 = np.array([6, 2, 13, 10])
    
    plt.plot(y1)
    plt.plot(y2)
    
    plt.show()
    

    2. 散点图

    使用 pyplot 中的 scatter() 方法来绘制散点图。

    scatter() 方法语法格式如下:

    matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
    
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    plt.rcParams['figure.figsize']=(2,2)
    x=np.random.normal(size=100)
    y=np.random.normal(size=100)
    plt.scatter(x,y)
    plt.show()
    

    image-20240713141111401

    注:绘制折线图、散点图时,如果想给坐标定义一些不一样的标记,就可以使用 plot() 方法的 marker 参数来定义。

    import matplotlib.pyplot as plt
    import numpy as np
    
    ypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])
    
    plt.plot(ypoints, marker = 'o')
    plt.show()
    

    image-20240713140838327

    3. 柱状图

    可以使用 pyplot 中的 bar() 方法来绘制柱形图。

    bar() 方法语法格式如下:

    matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
    

    参数说明:

    x:浮点型数组,柱形图的 x 轴数据。

    height:浮点型数组,柱形图的高度。

    width:浮点型数组,柱形图的宽度。

    bottom:浮点型数组,底座的 y 坐标,默认 0。

    align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。

    **kwargs::其他参数。

    import numpy as np
    import matplotlib.pyplot as plt
    # 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸
    plt.figure(figsize=(10, 10), dpi=80)
    # 柱子总数
    N = 10
    # 包含每个柱子对应值的序列
    values = (56796,42996,24872,13849,8609,5331,1971,554,169,26)
    # 包含每个柱子下标的序列
    index = np.arange(N)
    # 柱子的宽度
    width = 0.45
    # 绘制柱状图, 每根柱子的颜色为紫罗兰色
    p2 = plt.bar(index, values, width, label="num", color="#87CEFA")
    # 设置横轴标签
    plt.xlabel('clusters')
    # 设置纵轴标签
    plt.ylabel('number of reviews')
    # 添加标题
    plt.title('Cluster Distribution')
    # 添加纵横轴的刻度
    plt.xticks(index, ('mentioned1cluster', 'mentioned2cluster', 'mentioned3cluster', 'mentioned4cluster', 'mentioned5cluster', 'mentioned6cluster', 'mentioned7cluster', 'mentioned8cluster', 'mentioned9cluster', 'mentioned10cluster'))
    # plt.yticks(np.arange(0, 10000, 10))
    # 添加图例
    plt.legend(loc="upper right")
    plt.show()
    

    image-20240713141437729

    4. 饼图

    可以使用 pyplot 中的 pie() 方法来绘制饼图。

    pie() 方法语法格式如下:

    matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
    

    参数说明:

  • x:浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。
  • explode:数组,表示各个扇形之间的间隔,默认值为0。
  • labels:列表,各个扇形的标签,默认值为 None。
  • colors:数组,表示各个扇形的颜色,默认值为 None。
  • autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
  • labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
  • pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
  • shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
  • radius::设置饼图的半径,默认为 1。
  • startangle::用于指定饼图的起始角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
  • counterclock:布尔值,用于指定是否逆时针绘制扇形,默认为 True,即逆时针绘制,False 为顺时针。
  • wedgeprops:字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5。
  • textprops:字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
  • center:浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。
  • frame:布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels:布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • data:用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。
  • import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm  # 字体管理器
    # 准备字体
    my_font = fm.FontProperties(fname="C:\Windows\Fonts\simkai.ttf")
    # 准备数据
    data = [0.16881, 0.14966, 0.07471, 0.06992, 0.04762, 0.03541, 0.02925, 0.02411, 0.02316, 0.01409, 0.36326]
    # 准备标签
    labels = ['Java', 'C', 'C++', 'Python', 'Visual Basic.NET', 'C#', 'PHP', 'JavaScript', 'SQL', 'Assembly langugage',
              '其他']
    # 将排列在第4位的语言(Python)分离出来
    explode = [0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, 0]
    # 使用自定义颜色
    colors = ['red', 'pink', 'magenta', 'purple', 'orange']
    # 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
    plt.axes(aspect='equal')
    # 控制X轴和Y轴的范围(用于控制饼图的圆心、半径)
    plt.xlim(0, 8)
    plt.ylim(0, 8)
    # 不显示边框
    plt.gca().spines['right'].set_color('none')
    plt.gca().spines['top'].set_color('none')
    plt.gca().spines['left'].set_color('none')
    plt.gca().spines['bottom'].set_color('none')
    # 绘制饼图
    plt.pie(x=data,  # 绘制数据
            labels=labels,  # 添加编程语言标签
            explode=explode,  # 突出显示Python
            colors=colors,  # 设置自定义填充色
            autopct='%.3f%%',  # 设置百分比的格式,保留3位小数
            pctdistance=0.8,  # 设置百分比标签和圆心的距离
            labeldistance=1.0,  # 设置标签和圆心的距离
            startangle=180,  # 设置饼图的初始角度
            center=(4, 4),  # 设置饼图的圆心(相当于X轴和Y轴的范围)
            radius=3.8,  # 设置饼图的半径(相当于X轴和Y轴的范围)
            counterclock=False,  # 是否为逆时针方向,False表示顺时针方向
            wedgeprops={'linewidth': 1, 'edgecolor': 'green'},  # 设置饼图内外边界的属性值
            textprops={'fontsize': 12, 'color': 'black','fontproperties':my_font},  # 设置文本标签的属性值
            frame=1)  # 是否显示饼图的圆圈,1为显示
    # 不显示X轴、Y轴的刻度值
    plt.xticks(())
    plt.yticks(())
    # 添加图形标题
    plt.title('2018年8月的编程语言指数排行榜',fontproperties=my_font)
    # 显示图形
    plt.show()
    
    
    

    image-20240713141651642

    5. 直方图

    可以使用 pyplot 中的 hist() 方法来绘制直方图。

    hist() 方法是 Matplotlib 库中的 pyplot 子库中的一种用于绘制直方图的函数。

    hist() 方法可以用于可视化数据的分布情况,例如观察数据的中心趋势、偏态和异常值等。

    hist() 方法语法格式如下:

    matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs)
    
    import numpy as np
    import matplotlib.pyplot as plt
    from pylab import *
    x=np.random.normal(size=1000)
    plt.hist(x,bins=10)  #bins参数设置分桶数目
    plt.show()
    

    image-20240713141753930

    5. 中文显示

    Matplotlib 中文显示不是特别友好,要在 Matplotlib 中显示中文,我们可以通过两个方法:

  • 设置 Matplotlib 的字体参数。
  • 下载使用支持中文的字体库。
  • 在未设置字体,默认情况显示如下,中文部分不能正常显示:

    img

    作者:Token_w

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Matplotlib绘制数据处理图表

    发表回复