添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
阳光的胡萝卜  ·  delphi real转integer - ...·  1 年前    · 
绅士的石榴  ·  记一次npm run ...·  2 年前    · 

【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对象中画出多条曲线,下面就将这只股票的开盘价、收盘价、最低价、最高价都画出来。

发布于 2020-07-06 15:03