【Python专题】手把手教你使用Matplotlib库与数据可视化(入门级)
今天学习如何使用matplotlib库画图,首先举个绘图的小例子:
我们使用之前的方法抓取了紫金矿业的数据信息,并画出2017年的收盘价曲线
将时间转换为Python可以识别的datetime类型
画出收盘价曲线
1、修改图像的属性
1.1 坐标
1.1.1 更改坐标轴范围
假如我们绘出一段时间的买卖点
注意:如果想要使负号正确显示,我们需要添加这样一行代码:plt.rcParams['axes.unicode_minus'] = False
如果调整x轴和y轴的范围,我们使用 xlim( )和ylim( ) 函数。
现在把纵坐标的范围改为-1.5-1.5,
横坐标我们只改变一端值应该怎么办 ,比如让横坐标左边的值从0开始,右边不做调整,这时候就要区分xmin和xmax,在这种情况下,代码应该这样写 plt.xlim(xmin=0)
1.1.2 设定坐标标签与显示角度
除了修改坐标的范围,我们还可以通过 xticks( )和yticks( ) 函数设定坐标的标签。
(1)location指坐标的位置,一般由浮点数或是整数组成的列表;
(2)labels表示坐标的标签,一般为与location等长的字符串列表;
下面我们就把横坐标的标签改为时间标签
可以看到,为了防止日期标签之间的重合,我们使用rotation将它进行了45度旋转。
1.2 添加文本
1.2.1添加标题
通过pyplot中的 title( ) 函数实现
title( )中的loc参数代表文字所放的位置,默认情况下为中间,可以选择左边或者右边。
1.2.2 坐标轴标签
分别使用 xlabel( )和ylabel( ) 来设定横纵坐标轴的标签
1.2.3 增加网格线
添加网格线的目的是为了看的更加清晰
使用 grid( )函数 添加网格线。
(1)第一个参数代表显不显示网格线,默认为none,不显示,如果改为True就会显示。
(2)which代表以什么为刻度,最常用的就是默认值major,以坐标轴的刻度为标准分割,minor代表自己设定刻度,both表示大小区间坐标轴分割线都有。
(3)axis代表是x轴或y轴,默认情况下为both,两者都有。
1.2.4 增加图例
很多时候同一张图中有多条曲线,这时候就要增加图例,可以帮助我们区分不同的曲线。下面我们在画上开盘价曲线。
在做图例之前,为了更好的区分,在plot()函数中我们分别指定了曲线的label和线型参数。
可以发现我们仅仅使用legend( )函数就可以自动生成图例, 其中的loc参数可以指定位置,我们可以使用字符串类型值,也可以直接填数字值。
1.2.5线条的类型
在之前的例子中,我们运用linestyle参数来改变线条的形状,那么有哪些线条形状呢?
同样我们既可以使用名称取值,如 linestyle=‘solid’,还可以这样写 linestyle=‘-’,更甚,我们连linestyle也简化,写成 ls=‘-’也是可以的。
1.2.6 修改图形颜色
通过改变plot函数中,color的参数取值就可以实现,color也可以简写成c。
1.2.7 点的形状类型
线中的点,我们可以采用多种形式来突出显示,只需要改变plot函数中的 marker参数。
要指出的是,matplotlib为我们提供了一个方便的方法使我们可以同时修改线条的类型、颜色及点的形状,我们只需要输入一个字符串即可。比如我们输入‘--ro’代表我们使用虚线,红色,点的形状为圆点。
1.2.8 曲线宽度
我们使用 linewidth参数 进行修改,用法和linestyle一样,
同样linewidth也可以缩写为lw。
2. 图形的绘制
(1)柱状图
柱状图主要表示定性数据的频数分布,X轴表示定性变量的各个取值,Y轴则表示各个取值的频数。
定量的数据也可以画出柱状图,只是需要先对数据进行区间分组。
我们还以“紫金矿业”的数据为例
使用describe( )函数得到关于收盘价数据的简单信息,我们从表中发现,最大值为7.18,最小值为2.71,所以我们把数据分为6组,分别为(2,3】,(3,4】,(4,5】,(5,6】,(6,7】,(7,8】,并分别计算每一组数据的频数。
接下来,我们使用pyplot函数的bar( )函数画出数据的柱状图。
(1参数left设置每根柱子底部中间位置的坐标
(2)height为柱子高度,也就是频数
(3)width参数设置每根柱子的宽度。
(4)bottom参数设置柱子底部Y轴坐标。
如果绘制水平柱状图则使用 barh( )函数。
(2)直方图
柱状图主要用于展示定性数据的分布, 对于定量数据的分布,一般使用直方图来呈现。
(1)bins表示直方图的分布区间个数
(2)range用于设定直方图的小矩形的最小值与最大值。
(3)orientation=‘horizontal’可以设定水平直方图。
(4)同柱状图一样,用color参数也可以设定矩形颜色,edgecolor参数设矩形边沿的颜色。
(5)cumulative默认为False,如果cumulative=True,即可绘制累计分布直方图。
(6)histtype设定直方图的类型,该参数可能取值为bar,barstacked,step或者stepfilled,分别表示直方图、堆栈图、无填充的线图和有填充的线图四中。
水平直方图
累计分布直方图
无填充的线图
(3)饼图
饼图用 pie()函数
(1)a表示数据
(2)labels参数表示每块的标签
(3)colors修改颜色
(4)shadow表示是否有阴影,默认是False
(5)autopct=‘%.0f%%’给每一块添加占比百分比
(6)explode参数设置每一块距离中心的位置,如果想突出某块,可以将某块的距离设置非零。
(4)箱线图
箱线图能够很直观的表现出一个变量的分布,同时也有助于检测异常值 。
绘制箱线图使用 boxplot( )函数
注意:x所代表的数据必须是ndarray类型的,否则绘制不出来。如果使用pandas读取数据之后,需要将数据转换为ndarray类型。
我们画出紫金矿业开盘价,收盘价,最高价和最低价的箱线图。
(5)散点图
绘制散点图使用 scatter( )函数 。
最常用的几个参数:
(1)s代表大小
(2)c代表颜色
(3)marker代表标记类型。
(4)alpha设置透明度。
我们绘出紫金矿业昨日和今日的涨跌幅之间的散点图。
3.面向对象绘图
首先要了解一下Figure和Axes对象。
什么是面向对象绘图,我们之前学的都是利用 某个函数绘图,面向对象是将图形的元素看做一个对象,众多对象具有隶属关系,不同对象拼凑成一个完整的图形。
1、Figure和Axes对象
类比一下,我们在生活中画图,首先要拿出一张白纸,然后划分好区域,哪个区域该画什么,接着就开始动笔画了。面向对象绘图之前先创建一个Figure对象,就像一张白纸,接着创建Axes对象,类似于不同的区域,然后在这些区域中画出想要的图形。
其中[0.1,0.1,0.3,0.3]和[0.5,0.5,0.4,0.4]分别制定绘图区域,前两个数值代表Axes对象区域左下角的坐标,后两个数值代表Axes对象制定区域在x轴方向和y轴方向上的长度。
接下来,我们分别在这两个区域上画图,ax1区域画收盘价,ax2区域画开盘价
如果觉得这两条折现信息太少了,可以添加标题、坐标轴标签等等
2、多图绘制
2.1 多个子图绘制
我们上面说的也是多个子图绘图的例子,只是我们在确定Axes对象的区域时,采用的是设置坐标、长度和宽度的方式,接下来我们介绍另外一种常用的创建子图的 subplot( )函数。
接下来我们使用subplot函数,画出股票2017年的收盘价曲线和成交量柱状图。
2.2 一个图中画出多条曲线
有了上面的铺垫,我们就可以在一个Axes对象中画出多条曲线,下面就将这只股票的开盘价、收盘价、最低价、最高价都画出来。