Python 数据分析 Matplotlib 绘图库详解

目录

一、Matplotlib 简介

二、常用图表的绘制

2.1 绘制折线图

2.2 绘制柱形图

2.2.1 基本柱形图

2.2.2 多柱形图

2.3 绘制直方图

2.4 绘制饼形图

三、总结


一、Matplotlib 简介

        Matplotlib 是一个Python 2D 绘图库,常用于数据可视化。它能够以多种硬拷贝格式和跨平台的交
互式环境生成出版物质量的图形。

        Matplotlib 非常强大,绘制各种各样的图表游刃有余,它将容易的事情变得更容易,困难的事情变得可能。只需几行代码就可以绘制折线图、柱形图、直方图、饼形图、散点图等。

二、常用图表的绘制

        接下来的文章将介绍几种常用图表的绘制。

2.1 绘制折线图

        折线图可以显示随时间而变化的连续数据,因此非常适合用于显示在相等时间间隔下的数据趋势。如基础体温曲线图、学生成绩走势图、股票月成交量走势图,月销售统计分析图、微博、公众号、网站访问量统计图等都可以用折线图体现。在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。

        Matplotlib 绘制折线图主要使用 plot0函数,相信通过前面的学习,您已经了解了 plot0函数的基本用法,并能够绘制一些简单的折线图,下面尝试绘制多折线图。

        绘制学生语数外各科成绩分析图。使用 plot0函数绘制多折线图。例如,绘制学生语数外各科成绩分析图,程序代码如下:

#导入模块
import pandas as pd
import matplotlib.pyplot as plt

#导入Excel文件
df1=pd.read_excel('data.xls')

#多折线图
x1=df1['姓名']
y1=df1['语文']
y2=df1['数学']
y3=df1['英语']
plt.rcParams['font.sans-serif]=['SimHei']         #解决中文乱码
plt.rcParams['xtick.direction'] = 'out'           #x轴的刻度线向外显示
plt.rcParamsl['ytick.direction'] = 'in'           #y轴的刻度线向内显示
plt.title('语数外成绩大比拼',fontsize='18')        #图表标题
plt.plot(x1,y1,label='语文',color='r',marker='p')
plt.plot(x1,y2,label='数学',color='g',marker='.',mfc='r',ms=8,alpha=0.7)
plt.plot(x1,y3,label='英语',color='b',linestyle='-.',marker='*')
plt.grid(axis='y')                                #显示网格关闭y轴
plt.ylabel('分数')
plt.yticks(range(50,150,10))
plt.legend(['语文','数学','英语'])                 #图例

        运行程序,输出结果如图2-1所示。

Python 数据分析 Matplotlib 绘图库详解_第1张图片 图2-1

上述举例,用到了几个参数,下面进行说明:

        mfc:标记的颜色。

        ms:标记的大小。

        mec:标记边框的颜色。

        alpha:透明度,设置该参数可以改变颜色的深浅 。

2.2 绘制柱形图

        柱形图,又称长条图、柱状图、条状图等,是一种以长方形的长度为变量的统计图表。柱形图用来比较两个或两个以上的数据(不同时间或者不同条件),只有一个变量,通常用于较小的数据集分析。

        Matplotlib 绘制柱形图主要使用 bar0函数,语法如下:

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

参数说明:

        x:x轴数据。

        height:柱子的高度,也就是y轴数据。

        width:浮点型,柱子的宽度,默认值为 0.8,可以指定固定值。

        bottom:标量或数组,可选参数,柱形图的y坐标,默认值为 None。

        *:星号本身不是参数。星号表示其后面的参数为命名关键字参数,命名关键字参数必须传入参数名;否则程序会出现错误。

        align:对齐方式,如 center (居中)和edge (边缘),默认值为 center。

        data:data 关键字参数。如果给定一个数据参数,所有位置和关键字参数将被替换。

        **kwargs:关键字参数,其他可选参数,如 color (颜色)、alpha (透明度)、label (每个柱子显示的标签)等。

        用 4 行代码绘制简单的柱形图。程序代码如下:

import matplotlib.pyplot as plt
x=[1,2,3,4,5,6]
height=[10,20,30,40,50,60]
plt.bar(x,height)

运行程序,输出结果如图2-2所示。

Python 数据分析 Matplotlib 绘图库详解_第2张图片 图2-2 简单柱形图

        bar()函数可以绘制出各种类型的柱形图,如基本柱形图、多柱形图、堆叠柱形图,只要将 bar()函数的主要参数理解透彻,就会达到意想不到的效果。下面介绍几种常见的柱形图。

2.2.1 基本柱形图

        绘制 2013-2019 年线上图书销售额分析图。使用 bar()函数绘制“2013一2019 年线上图书销售额分析图”,程序代码如下:

#导入模块
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('books.xlsx')
plt.rcParams['font.sans-serif']=['SimHei']            #解决中文乱码
x = df['年份']
height = df['销售额']
plt.grid(axis="y",which="major")                      #生成虚线网格
#x、y轴标签
plt.xlabel('年份')
plt.ylabel('线上销售额(元)')
#图表标题
plt.title('2013-2019年线上图书销售额分析图')
plt.bar(x,height,width = 0.5,align='center',color = 'b',alpha = 0.5)
#设置每个柱子的文本标签,format(b,',')格式化销售额为千位分隔符格式
for a,b in zip(x,height):
    plt.text(a,b,format(b,','),ha='center',va = 'bottom',fontsize = 9,color = 'b',alpha = 0.9)
plt.legend(['销售额'])                      #图例

        运行程序,输出结果如图2-2-1所示。

Python 数据分析 Matplotlib 绘图库详解_第3张图片 图2-2-1 基本柱形图

        本示例应用了前面所学习的知识,例如标题、图例、文本标签和坐标轴标签等。

2.2.2 多柱形图

        绘制各平台图书销售额分析图。

        对于线上图书销售额的统计,如果要统计各个平台的销售额,可以使用多柱形图,不同颜色的村子代表不同的平台,如京东、天猫、自营等,程序代码如下:

#导入模块
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('books.xlsx',sheet_name='Sheet2')
plt.rcParams['font.sans-serif']=['SimHei']                #解决中文乱码
x=df['年份']
y1=df['京东']
y2=df['天猫']
y3=df['自营']
width = 0.25

#y轴标签
plt.ylabel('线上销售额 (元)')

#图表标题
plt.title('2013--2019年线上图书销售额分析图')
plt.bar(x,y1,width = width,color ='darkorange')
plt.bar(x+width,y2,width = width,color = 'deepskyblue')
plt.bar(x+2*width,y3,width = width,color = 'g')

#设置每个柱子的文本标签,format(b,)格式化销售额为千位分隔符格式
for a,b in zip(x,y1):
    plt.text(a,b,format(b,','),ha='center',va= 'bottom',fontsize=8)
for a,b in zip(x,y2):
    plt.text(a+width,b,format(b,','),ha='center',va = 'bottom',fontsize=8)
for a,b in zip(x,y3):
    plt.text(a+2*width,b,format(b,','),ha = 'center',va = 'bottom', fontsize = 8)

plt.legend(['京东','天猫','自营')        #图例

        在本示例中,柱形图中若显示n个柱子,则柱子宽度值需小于 1/n;否则柱子会出现重叠现象运行程序,输出结果如图2-2-2所示。

Python 数据分析 Matplotlib 绘图库详解_第4张图片 图2-2-2 多柱形图

2.3 绘制直方图

        直方图,又称质量分布图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。直方图是数值数据分布的精确图形表示,是一个连续变量(定量变量)的概率分布的估计。
        绘制直方图主要使用hist()函数,语法如下:

matplotlib.pyplot.hist(x,bins=None,range=None,density=None,bottom=None,histtype='bar',align='mid',log=False,color=None,label=None,stacked=False,normed=None)

参数说明:

        x:数据集,最终的直方图将对数据集进行统计。

        bins:统计数据的区间分布。

        range:元组类型,显示的区间。

        density:布尔型,显示频率统计结果,默认值为 None。设置值为 False,不显示频率统计结果:设置值为 True,则显示频率统计结果。需要注意,频率统计结果=区间数目/(总数x区间宽度)

        histtype:可选参数,设置值为 bar、barstacked、step 或stepfilled,默认值为 bar,推荐使用默认配置,其中step 使用的是梯状,stepfilled 则会对梯状内部进行填充,效果与bar 类似。

        align:可选参数,控制柱状图的水平分布,设置值为 left、mid或right,默认值为 mid,其中left或者right会有部分空白区域,推荐使用默认值。

        log:布尔型,默认值为 False,即y坐标轴是否选择指数刻度。

        stacked:布尔型,默认值为 False,是否为堆积柱状图。

        绘制简单直方图,程序代码如下:

import matplotlib.pyplot as plt
x = [22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]
plt.hist(x,bins = [0,25,50,75,100])

运行程序,输出结果如图2-3所示。

Python 数据分析 Matplotlib 绘图库详解_第5张图片 图2-3 简单直方图

        直方图分析学生数学成绩分布情况,再举一个例子,通过直方图分析学生数学成绩分布情况,程序代码如下:

import pandas as pd
import matplotlibpyplot as plt

df = pd.read_excel('grade1.xls')
plt.rcParams['fontsans-serif']=['SimHei']         #解决中文乱码
x=df['得分']
plt.xlabel('分数')
plt.ylabel('学生数量')
#显示图标题
plt.title("高一数学成绩分布直方图")
plt.hist(x,bins = [0,25,50,75,100,125,150],facecolor="blue",edgecolor="black",alpha=0.7)
plt.show()

运行程序,输出结果如图 2-3-1所示。

Python 数据分析 Matplotlib 绘图库详解_第6张图片 图 2-3-1 数学成绩发布直方图

        上述举例,通过直方图可以清晰地看到高一数学成绩分布情况。基本呈现正态分布,两边低中间高,高分段学生缺失,说明试卷有难度。那么,通过直方图还可以分析以下内容。

        (1)对学生进行比较。呈正态分布的测验便于选拔优秀,甄别落后,通过直方图一目了然。

        (2)确定人数和分数线。测验成绩符合正态分布可以帮助等级评定时确定人数和估计分数段内的人数,确定录取分数线、各学科的优生率等。

        (3)测验试题难度。

2.4 绘制饼形图

        饼形图常用来显示各个部分在整体中所占的比例。例如,在工作中如果遇到需要计算总费用或金额的各个部分构成比例的情况,一般通过各个部分与总额相除来计算,而且这种比例表示方法很抽象,而通过饼形图将直接显示各个组成部分所占比例,一目了然。

        Matplotlib绘制饼形图主要使用 pie0函数,语法如下:

matplotlib.pyplot.pie(
    x,explode=None,
    labels=None,
    colors=None,
    autopct=None,
    pctdistance=0.6,
    shadow=False,
    labeldistance=1.1,
    startangle=None,
    radius=None,
    counterclock=True,
    wedgeprops=None,
    textprops=None,
    center-(0, 0),
    frame=False,
    rotatelabels=False,
    hold=None,
    data=None
)

参数说明:

        x:每一块饼图的比例,如果 sum(x)>1会使用 sum(x)归一化。

        explode:每一块饼图离中心的距离。

        labels:每一块饼图外侧显示的说明文字。

        autopct:设置饼图百分比,可以使用格式化字符串或 format()函数。如'%1.1f'保留小数点前后1位。

        pctdistance:类似于 labeldistance 参数,指定百分比的位置刻度,默认值为0.6。

        shadow:在饼图下面画一个阴影,默认值为 False,即不画阴影。

        labeldistance:标记的绘制位置,相对于半径的比例,默认值为 1.1,如<1 则绘制在饼图内侧。

        startangle:起始绘制角度,默认是从x轴正方向逆时针画起,如设置值为90 则从y轴正方向画起。

        radius:饼图半径,默认值为1。

        counterclock:指定指针方向,布尔型,可选参数。默认值为 True,表示逆时针;如果值为False则表示顺时针。

        wedgeprops:字典类型,可选参数,默认值为 None。字典传递给 wedge 对象,用来画一个饼图。例如wedgeprops={'linewidth':2}设置wedge 线宽为2。

        textprops:设置标签和比例文字的格式,字典类型,可选参数,默认值为 None。传递给 text
对象的字典参数。

        center:浮点类型的列表,可选参数,默认值为(0,0),表示图表中心位置。

        frame:布尔型,可选参数,默认值为 False,不显示轴框架(也就是网格); 如果值为 True,<则显示轴框架,与 grid0函数配合使用。实际应用中建议使用默认设置,因为显示轴框架会干扰饼形图效果。

        rotatelabels:布尔型,可选参数,默认值为 False; 如果值为 True,则旋转每个标签到指定的5角度。

        绘制简单饼形图,程序代码如下:

import matplotlib.pyplot as plt
x = [2,5,12,70,2,9]
plt.pie(x,autopct ='%1.1f%%)

        运行程序,输出结果如图2-4所示。

Python 数据分析 Matplotlib 绘图库详解_第7张图片 图2-4 简单饼形图

        饼形图也存在各种类型,主要包括基础饼形图、分裂饼形图、立体感带阴影的饼形图、环形图等下面不一一进行介绍了。

三、总结

        数据统计得再好都不如一张图表清晰、直观。本章用大量的举例详细地介绍了 Matplotlib 图表,其根本在于能够使读者全面透彻地了解和掌握最基础的图表,并应用到实际数据统计分析工作中,同时也为以后学习其他绘图库奠定坚实的基础。

  1. 强大的绘图功能:Matplotlib支持绘制各种常见的图表类型,包括线图、散点图、柱状图、饼图、等高线图、3D图等。你可以使用它来展示数据的分布、趋势、关系等。

  2. 灵活的图形定制:Matplotlib提供了许多参数和选项,使你能够轻松地自定义图形的外观。你可以设置线条颜色、标记样式、图例、轴标签、标题、背景色等,以满足你的需求。

  3. 多种输出格式:Matplotlib可以将图形保存为各种不同的文件格式,如PNG、JPEG、PDF、SVG等。这使得你可以方便地将图表插入到文档、报告或网站中。

  4. 支持交互式绘图:除了静态图像,Matplotlib还通过其子包Matplotlib.pyplot提供了一些交互式绘图功能。你可以使用它来创建动画、可缩放的图形,并与用户进行交互。

  5. 丰富的扩展性:Matplotlib是一个底层库,它提供了很多细节的控制。此外,它还允许你通过使用其面向对象的API来创建高级图形,以满足更复杂的需求。

  6. 社区支持和文档丰富:Matplotlib有一个活跃的社区,提供了详细的文档、示例和教程,你可以从中获取帮助和学习资源。

        总之,Matplotlib是Python数据分析中最受欢迎和常用的绘图库之一。它的强大功能、灵活性和丰富的扩展性使得它成为数据可视化的首选工具之一。无论你是初学者还是专业人士,使用Matplotlib都能轻松创建出具有吸引力和信息丰富的图形。

你可能感兴趣的:(python,数据分析,matplotlib)