手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)

目录

Matplotlib介绍

线形图(折线图)

直方图

条形图

饼状图

散点图


Matplotlib介绍

       matplotlib是一个Python 的2D绘图库,提供了一套表示和操作图以及图内部对象的函数,借助它可以绘制多种多样的数据图,如线形图饼状图等。

Matplotlib中提供了两种绘图接口:

  • 基于MATLAB自动创建和管理图和坐标系,用 pyplot 中函数作图;

  • 基于面向对象显示创建图和坐标系,再调用对象的方法来作图。

本文介绍的绘图都是基于MATLAB的绘图接口

       Pyplot 是一个有命令风格的函数集合,和MATLAB很相似,通过调用函数不断完善绘图,最开始时图中什么都没有,需要什么就调用对应函数进行添加。pyplot 子库中的figure()用来创建图subplot()用来创建子图。所有的操作都是在子图上进行,pyplot 表示当前子图,若没有就创建一个子图,实际应用中经常直接用pyplot调用相关函数。

Python标准库中默认不包含 matplotlib,需要自己下载安装:

  • 命令行安装 pipinstall matplotlib (安装过程中会涉及到相关依赖包的安装,稍微有点慢)

  • 借助于第三方软件,例如通过Anaconda进行软件的安装和包管理。

Matplotlib中的所有对象都称为Artist,大致可分为两类:

  • 容器类坐标系坐标轴刻度;(图中可包含若干个坐标系,坐标系中又包含多个坐标轴,坐标轴上包含多个刻度)

  • 基础类线文本图例网格标题

Matplotlib中图的构成如图所示,(该图来源于官网),主要包括:(figure)、坐标系(axes)、坐标轴(axis)、主刻度(Major tick)、分刻度(Minor tick)、主刻度标签(Major tick label)、分刻度标签( Minor tick label)、Y 轴标签(Y axis label)、X 轴标签(X axis label)、线(line)、(marker)、图例(legend)、网格(grid)、标题(title)等。 

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第1张图片

    注意:并不是所有图中都包含这些内容,图中默认什么都没有,需要什么调用相应的方法即可将其添加进去。Pyplot中常见的方法如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第2张图片

pyplot.figure()

  • num整数或字符串,可选的,如果没有传值,则采用自增值,可通过number属性访问;如果传递整数,则会检查是否存在对应的图,存在则直接返回,否则创建新的图;如果传的是字符串,则设置为窗口的标题;

  • figsize浮点型元组,可选。图的宽、高值,单位为英寸,默认为[6.4, 4.8]

  • dpi整数,可选。分辨率 ,默认为100

  • facecolor背景颜色,默认为白色

  • edgecolor边框颜色,默认为白色,默认看不出效果,需要将linewidth设置为一个比较大的值才能观察到;

  • frameon:是否绘制边框和背景,默认为True

  • FigureClass图对应的类;

  • clear是否清空画布,默认为False,设置为True,且图已存在时,会清空已有内容;

  • kwargs:其他关键字参数,例如线条宽度。

可以同时创建和显示多个图(figure)。

pyplot.subplot()

如果想在同一个图中绘制多个坐标系,可调用多次调用subplot()方法,每次在当前图中添加一个子块,返回一个坐标系对象。方法定义如下:

  • args可变参数,可传递3个整数,如①所示,分别表示行数列数以及当前的位置;也可传递一个3位整数,如②所示,第1位表示行数、第2位表示列数、第3位表示当前位置,此时要求所有数字都小于10。此时将当前图划分为 nrows * ncols 网格,子块的位置左上角为1从左到右,从上到下不断增大。如果多次调用subplot() 时,会在对应位置添加新内容,如果已有内容则覆盖。每次画图前需要指定位置,默认会执行subplot(1,1,1)
  • kwargs:其他关键字参数,例如可以通过projection指定坐标系类型、通过polar指定是否为极坐标、通过sharexsharey指定共享x轴或y轴坐标等。例如下面代码将整个图划分为2行2列4个区域。

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第3张图片

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第4张图片

线形图(折线图)

       线形图主要是通过线条将序列中相邻的两个点进行连接而成,使用非常广泛,通过plot()函数绘制,可以指定线条的样式点的标记以及颜色等。使用plot()方法绘制点或线等,需指定所有点的坐标,可同时绘制多条线。调用方式有如下两种:

  • plot([x]y[fmt], *, data=None, **kwargs)

  • plot([x]y[fmt][x2]y2[fmt2], ..., **kwargs)

    主要参数及其含义如下:

  • xx轴坐标,可选,当没有传值时,采用默认值,值的个数与y轴坐标个数相同,从0开始不断增大

  •  yy轴坐标,不可省略,通常是一个数或一维数组;

  •  data: 通常为可检索的对象,例如字典DataFrame等;

  •  fmt:定义基本样式,由[颜色][点的标记][线条样式]三部分字符组成,也可通过关键字参数设置

  • kwargs关键字参数,例如:color(颜色)、marker(标记)、linestyle(线条样式)、linewidth(线条宽度)、markersize(标记大小)、label(标签,用于图例)等。

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第5张图片

如果通过color关键字参数单独设置颜色,可使用颜色单词全称(如“green”)以及十六进制字符串(如“#aabbcc”)。

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第6张图片

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第7张图片

注意三种字符顺序可打乱,也可省略部分,没指定线条样式时,将不显示线条,没指定标记则不显示点

线形图案例

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第8张图片

参考代码:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第9张图片

注意:pyplot 默认不支持中文显示,两种解决方案:

  • 使用 rcParams['font.family']属性修改字体,此时,整个图中的字体都会改变;

  • 在需要显示中文的地方,增加一个属性:fontproperties,此时只修饰部分地方,其他地方的字体不会跟随改变;

rcParams中关键的属性及其默认值如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第10张图片

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第11张图片

采用中文字体时,部分字体下,负号不能正常显示,需设置 axes.unicode_minus为 False

绘制正弦曲线、余弦曲线

思路:首先需要一系列的X轴坐标,可通过numpy中的arange()函数生成,例如从0 到 4,步长为0.02;然后借助 numpy 中的正弦、余弦函数对每个x坐标分别求值;最后根据x坐标和对应的y坐标画图

运行效果图如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第12张图片

参考代码如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第13张图片

直方图

       直方图是用一系列等宽不等高的长方形来表示数据,宽度表示数据范围的间隔,高度表示在给定间隔内数据出现的频数,矩形的高度跟落在间隔内的数据数量成正比,变化的高度形态反映了数据的分布情况

直方图的一些效果举例:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第14张图片

pyplot 中使用hist() 绘制直方图,并以元组形式返回直方图的计算结果,包括各区间中元素的数量,区间的取值范围,以及具体每个区间对象。

hist (x,bins=None, range=None, density=False,weights=None, cumulative=False, bottom=None,histtype='bar', align='mid', orientation='vertical',**kwargs)

一些关键参数说明:

  • x数组或者数组序列不要求每个数组长度相同),用于存放数据;

  •  bins整数、序列或字符串,整数表示等宽区间的个数,自动计算区间范围,序列则表示区间的范围,除了最后一个以外,都是包含左边不包含右边,字符串则表示对应的策略,默认为hist.bins;

  • range:元组,指定最小值和最大值,默认为数据中的最小值和最大值,如果bins是一个序列,则range没什么影响;

  • density布尔值,可选,如果为True,则返回的是归一化的概率密度,所有区间的概率之和为1

  • weight类似于数组的值,可选,形状和 x 相同,表示每个值对应的权重,默认情况下所有数据的权重相同;

  •  cumulative布尔值或-1,累积求和,表示小于某个数的所有元素个数之和,随着数的增大而不断增大,如果为-1,则反转方向,表示大于某个数的所有元素个数之和,随着数量增大而不断减小;

  • histtype :直方图类型,'bar'(多个并列摆放), 'barstacked'(多个堆叠摆放), 'step'(生成对应的折线),  'stepfilled'(填充相关区域);

  • orientation直方图的方向,默认为垂直。

直方图案例

思路:随机生成1000个以10为中心的正态分布的数,和1000个以12为中心的正态分布的数,然后将结果取值范围划分为30个等距离的区间,然后统计各个区间上数出现的个数,最终绘制出直方图。如图所示。

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第15张图片

参考代码如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第16张图片

条形图

       条形图跟直方图类似,只不过 x 轴表示的不是数值而是类别。直方图的各矩形通常是连续排列,而条形图则是分开排列。使用 pyplot 的 bar()函数绘制的条形图。

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

  • xx 轴的位置序列,即条形的起始位置

  •  heighty轴的数值序列,即条形图的高度,需展示的数据;

  • width每个矩形的宽度,可选,默认为0.8

  • bottom y轴坐标的基线,默认为0;

  • align对齐方式,可选,center和edge两种,默认为'center'

  • color条形图的填充颜色

  • edgecolor条形图边框的颜色;

  • orientation方向,vertical(垂直)、 horizontal(水平)

    如果需要在一个图上显示多种条形图,可调整位置和宽度让多个条形图并列摆放,也可以堆叠摆放

条形图案例

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第17张图片

饼状图

饼状图显示一个数据系列中各项的大小与各项总和的比例。Pyplot中绘制饼状图的函数为 pie(),主要参数如下:

  • x饼图中每一块的比例,通常是一个数组如果 sum(x) > 1 会使用归一化后的比例,即每一块除以sum(x),如果sum(x) < 1,则按照实际比例,此时有一部分为空白

  • explode指定饼图中每块离开中心的距离,通常是一个数组,默认为0

  • labels为饼图添加标签说明,类似于图例说明,标签列表

  • colors指定饼图的填充色,颜色列表

  • autopct设置饼图内每块百分比显示样式,可以使用format字符串或者格式化函数'% width. Precision f %%'指定饼图内百分比的数字显示宽度和小数的位数

  • radius设置饼图的半径

  • labeldistance每块旁边的文本标签的位置离饼的中心点的距离;

  • shadow是否有阴影效果,默认为False。

案例:已知一个员工一天的活动时间分配为:工作8小时、睡觉7小时、吃饭3小时,玩乐6小时,根据这些信息,绘制该员工一天时间分配饼状图,效果如下。

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第18张图片

  参考代码如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第19张图片

散点图

       散点图是以一个变量为横坐标另一变量为纵坐标,利用散点的分布形态反映变量统计关系的一种图形,以不同颜色、不同大小的点表示数据之间的关系。Pyplot 中绘制散点图的函数为scatter(),主要参数如下:

scatter(xys=None, c=None,marker=None, cmap=None,norm=None, vmin=None,vmax=None, alpha=None,**kwargs)

  • x散点图中点的x轴坐标

  • y散点图中点的y轴坐标

  • s散点图点的大小,默认为20,标量或数组;

  • c散点图点的颜色,默认为蓝色,标量或数组;

  • marker指定散点图点的形状,默认为圆形;

  • cmap颜色映射,可选,将颜色映射到已有色系,例如plt.cm.Blues

  • norm将亮度数据归一化到 0-1 之间

  • vmin亮度的最小值

  • vmax亮度的最大值

  • alpha设置散点的透明度

编程程序,绘制散点图,要求图中的每个散点随机呈现不同的大小和颜色。效果如图所示,随机生成30个点,x轴坐标和y轴坐标都在0-10之间,颜色取值在0-30之间。大小在30-300之间。效果图如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第20张图片

代码参考如下:

手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)_第21张图片

更多关于手把手教你学Python的文章请关注微信公众号:手把手教你学编程。详细的视频讲解可查看 CSDN学院 里的手把手教你学Python系列视频:https://edu.csdn.net/lecturer/5686。    

你可能感兴趣的:(Python学习,python,数据可视化,数据分析)