200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)

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

时间:2018-08-07 04:04:53

相关推荐

手把手教你学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)等。

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

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个区域。

线形图(折线图)

线形图主要是通过线条将序列中相邻的两个点进行连接而成,使用非常广泛,通过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(标签,用于图例)等。

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

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

线形图案例

参考代码:

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

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

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

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

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

绘制正弦曲线、余弦曲线

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

运行效果图如下:

参考代码如下:

直方图

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

直方图的一些效果举例:

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个等距离的区间,然后统计各个区间上数出现的个数,最终绘制出直方图。如图所示。

参考代码如下:

条形图

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

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

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

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

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

bottomy轴坐标的基线,默认为0;

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

color条形图的填充颜色

edgecolor条形图边框的颜色;

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

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

条形图案例

饼状图

饼状图显示一个数据系列中各项的大小与各项总和的比例。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小时,根据这些信息,绘制该员工一天时间分配饼状图,效果如下。

参考代码如下:

散点图

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

scatter(x,y,s=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的文章请关注微信公众号:Python资源分享。详细的视频讲解可查看CSDN学院里的手把手教你学Python系列视频:/lecturer/5686

完整课件下载网址如下:

数据可视化-matplotlib(课件)_python数据可视化课件-Python文档类资源-CSDN下载详细介绍Python中数据可视化第三方库Matplotlib的使用,包括绘图基础以及一些经典图的绘制python数据可视化课件更多下载资源、学习资料请访问CSDN下载频道./download/Dream_Gao1989/13624911?spm=1001..3001.5503

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。