一篇文章带你使用Pandas画出图形

wangquannuaa 2019-07-01

一篇文章带你使用Pandas画出图形

这篇文章带领大家介绍一下如何使用pandas进行可视化操作,绘制一些图形,如条形图、直方图、散点图等,以及一些绘图时缺失值的绘制方式和一些绘图的工具和格式,方便大家更快的了解如何使用Pandas进行可视化的绘图,相信通过这篇文章大家可以在以后处理数据的时候可以绘制出自己想要的图形。

一、可视化基础介绍

Pandas在内部绘图时使用的是matplotlib的API, Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。 Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包,Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。 只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等。为了简单绘图,pyplot模块提供了类似于MATLAB的界面,特别是与IPython结合使用时。

一篇文章带你使用Pandas画出图形

二、基本绘图

在Pandas中series和DataFrame上面的使用plot方法进行绘图只是围绕着plt.plot()的简单封装。

  • 生成一个1000条随机数,索引为2000/1/1开始1000条的series,并生成图。

一篇文章带你使用Pandas画出图形

在DataFrame中,plot()可以方便的绘制带有标签的所有列

  • 生成一个行索引为ts表的索引,列为ABCD 4列,内容为4列1000条随机数的DataFrame,并绘制为图

一篇文章带你使用Pandas画出图形

  • 使用plot()中的x和y关键字可以绘制一列与另一列对应的图片

一篇文章带你使用Pandas画出图形

三、其他绘图

绘制方法允许除了默认线条之外的其他绘图样式。这些方法可以通过plot()的kind关键字参数空值。包括以下内容:

Bst或bsth

绘制条形图

Hist

绘制直方图

Box

绘制箱形图

Kde或density

绘制密度图

Area

绘制区域图

Scatter

绘制散点图

Hexbin

绘制蜂巢图

Pie

绘制饼图

除了使用kind参数,也可以使用直接对应的方法来完成相应的绘图效果

  1. 条形图

条形统计图主要用于表示离散型数据资料,即计数数据。单式条形统计图和复式条形统计图的相同点是都能让人清楚地看出 数量的多少。不同点就是单式条形统计图用于比较一个物体,而复式条形统计图用于比较多个物体的数量。

一篇文章带你使用Pandas画出图形

或者使用DataFrame的plot.bar()方法生成一个或多个条形图

  • 生成10行4列的随机数,列名为a,b,c,d,并绘制条形图

一篇文章带你使用Pandas画出图形

如果要生成堆叠的条形图,可以设置stacked参数=True;

一篇文章带你使用Pandas画出图形

如果要生成水平的条形图可以使用barh方法:

一篇文章带你使用Pandas画出图形

  1. 直方图

直方图可以用来查看显示质量波动的状态;比较直观地传递有关过程质量状况的信息;当质量数据波动状况之后,就能掌握过程的状况,从而确定在什么地方集中力量进行质量改进工作。

直方图我们可以通过DataFrame.plot.hist()和series.plot.hist()进行绘制

一篇文章带你使用Pandas画出图形

直方图还可以通过参数实现堆叠,只需要将Stacked参数=True。宽度大小还可以通过bins关键字更改。

一篇文章带你使用Pandas画出图形

  1. 箱线图

箱线图是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法,它也可以粗略地看出数据是否具有有对称性,分布的分散程度等信息,特别可以用于对几个样本的比较,可以用来查看数据异常值;数据的偏态和尾重;数据的形状。

绘制箱线图可以通过plot.box()进行绘制

一篇文章带你使用Pandas画出图形

我们还可以通过传递颜色关键字对boxplot进行着色

一篇文章带你使用Pandas画出图形

着色完之后,盒子边为暗绿色,线条为暗黄色,中位数为暗蓝色,第一四分位数和第三四分位数为绿色。

我们还可以通过vert参数来空值方向,=False为横向,=True为纵向(默认),还可以通过positions空值每个图的位置。

一篇文章带你使用Pandas画出图形

除了通过plot.box()绘制箱线图之外,我们还可以通过boxplot的方法直接进行绘图,两种方法的效果是一样的。

一篇文章带你使用Pandas画出图形

我们也可以通过使用by关键字参数创建分层的boxplot来创建分组绘制图形。

一篇文章带你使用Pandas画出图形

通过x列进行分组,col1中a的随机数差距较大,b的差距很小,col2中a的差距小,b的差距稍大。

一篇文章带你使用Pandas画出图形

除了可以使用单个关键字之外还可以通过多个关键字进行分组

一篇文章带你使用Pandas画出图形

首先通过设置的条件可以看出是对Col1和col2进行分组,分组的条件是X和Y,然后将X和Y进行分组,总共可以分为AA,AB,BA,BB这四种类型,然后将这四种类型进行绘制箱线图得出图形

4、面积图

面积图又称区域图,强调数量随时间而变化的程度,也可用于引起人们对总值趋势的注意。堆积面积图和百分比堆积面积图还可以显示部分与整体的关系。

我们可以通过面积图查看总值的趋势,可以帮助我们进行趋势分析。

绘制面积图我们可以通过plot.area

一篇文章带你使用Pandas画出图形

如果我们不希望绘制堆叠图,可以通过Stacked=False,进行绘制

一篇文章带你使用Pandas画出图形

5、散点图

散点图是指数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,通常用于回归分析,据此可以选择合适的函数对数据点进行回归拟合。多组散点图通常用于聚类,能直观地看出每组数据点的分布。

绘制散点图可以使用plot.scatter()方法

一篇文章带你使用Pandas画出图形

如果希望再一个图绘制多个列,指定绘图的目标后ax可以重复调用绘图方法,最好是指定颜色和标签关键字来区分每个组。

一篇文章带你使用Pandas画出图形

通过数据可以看出,两个表的数据通过颜色区分开来,一个为橙色一个为蓝色,很方便的就能看出每个数据的分布情况。

关键字C可以作为列的名称给出,可以为每个点提供颜色。

一篇文章带你使用Pandas画出图形

一篇文章带你使用Pandas画出图形

6、蜂巢图(六角形箱体图)

使用plot.hexbin()进行绘制蜂巢图,可以看出数据出现的次数多少。

一篇文章带你使用Pandas画出图形

7、饼图

饼状图是以圆形代表研究对象的整体,用以圆心为共同顶点的各个不同扇形显示各组成部分在整体中所占的比例,要注明各扇形所代表的项目的名称(可用图例表示)及其所占百分比。饼状图可以比较清楚地反映出部分与部分、部分与整体之间的数量关系,易于显示每组数据相对于总数的大小,而且显现方式直观。

我们可以通过plot.pie()进行生成饼图

一篇文章带你使用Pandas画出图形

分成两组进行绘制

一篇文章带你使用Pandas画出图形

通过autopct参数进行查看占比

一篇文章带你使用Pandas画出图形

如果数据中值的总和小于1的时候,那么matplotlib则会绘制一个半圆。

一篇文章带你使用Pandas画出图形

四、缺失值的默认绘制方式

Pandas试图真实确切地描绘包含缺少值的DataFrame或series。根据绘图类型,丢弃省略或填充缺失值。

绘图类型

缺失值处理方法

Line

在缺失值处填充空白

Line(stacked)

填充为0

Bar

填充为0

Scatter

删除掉缺失值

Histogram

删除掉缺失值(逐列删除)

Box

删除掉缺失值(逐列删除)

Area

填充为0

Kde

删除掉缺失值(逐列删除)

Hexbin

删除掉缺失值

Pie

填充为0

如果默认的缺失值处理方式不符合预期的话,就需要自己手动去处理缺失值了(使用fillna或者dropna方法)

五、绘图工具

1、矩阵散点图

导入模块

一篇文章带你使用Pandas画出图形

查看图形

一篇文章带你使用Pandas画出图形

可以发现每两个图之间出散点之间的位置与图形

2、密度图

一篇文章带你使用Pandas画出图形

查看数据的分布情况。

六、绘图格式

大多数的绘图方法都有一组关键字参数来控制返回图形的布局和格式。

1、控制图例

一篇文章带你使用Pandas画出图形

一篇文章带你使用Pandas画出图形

当legend=True(默认)时会显示图例,也就是二图的右上角,=False时会隐藏图例。

2、scales

通过传入logy获得将y轴更改为logy的情况

一篇文章带你使用Pandas画出图形

3、在双Y轴上面画图

一篇文章带你使用Pandas画出图形

如果要在DataFrame中绘制一些列,可以将列的名称给secondary_y关键字

一篇文章带你使用Pandas画出图形

如果在辅助Y轴上绘制的列在图例中自动标记为(右),如果要关闭自动标记,就需要使用mark_right=False了。

相关推荐