数据可视化

作者: owolf | 来源:发表于2018-08-12 22:20 被阅读2次

这两天没更新,好好反思了一下自己的人生观、价值观和世界观,松懈了两天,也等于给自己打了两针强心剂。与过往做个了断,剩余的时间,去实现自己心中想过但一直搁置的事。

进入正题,主要写数据的可视化库(matplotlib)

一、matplotlib API入门

1、Figure和Subplot

matplotlib的图像都位于Figure对象中.。

对于复杂的图形必须将所有的绘图命令存在一个cell里。例如:

"k--"是一个线型选项,用于告诉matplotlib绘制黑色虚线图。那些由fig.add_subplot所返回的对象是AxesSubplot对象,直接调用它们的实例方法就可以在其它空着的格子里面画图了.

创建包含subplot网格的figure是一个非常常见的任务。

plt.subplots方法可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组。

这是非常实用的,因为可以轻松地对axes数组进行索引,就好像是一个二维数组一样,例如axes[0,1]。你还可以通过sharex和sharey指定subplot应该具有相同的X轴或Y轴。在比较相同范围的数据时,这也是非常实用的,否则,matplotlib会自动缩放各图表的界限。

pyplot.subplots的参数:

2、调整subplot周围的间距

matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距。利用Figure的subplots_adjust方法可以轻而易举地修改间距。

wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。

各subplot之间没有间距

3、颜色、标记和线型

matplotlib的plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。

常用的颜色可以使用颜色缩写,你也可以指定颜色码(例如,'#CECECE')。你可以通过查看plot的文档字符串查看所有线型的合集。

线图可以使用标记强调数据点。标记也可以放到格式字符串中,但标记类型和线型必须放在颜色后面。

在线型图中,非实际数据点默认是按线性方式插值的。可以通过drawstyle选项修改。

不同drawstyle选项的线型图

因为我们传递了label参数到plot,我们可以创建一个plot图例,指明每条使用plt.legend的线。

4、刻度、标签和图例

对于大多数的图表装饰项,其主要实现方式有二:使用过程型的pyplot接口(例如,matplotlib.pyplot)以及更为面向对象的原生matplotlib API。

pyplot接口的设计目的就是交互式使用,含有诸如xlim、xticks和xticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签等。其使用方式有以下两种:

调用时不带参数,则返回当前的参数值(例如,plt.xlim()返回当前的X轴绘图范围)。

调用时带参数,则设置参数值(例如,plt.xlim([0,10])会将X轴的范围设置为0到10)。

所有这些方法都是对当前或最近创建的AxesSubplot起作用的。它们各自对应subplot对象上的两个方法,以xlim为例,就是ax.get_xlim和ax.set_xlim。使用subplot的实例方法在处理多个subplot时更清楚一些。

5、设置标题、轴标签、刻度以及刻度标签

要改变x轴刻度,最简单的办法是使用set_xticks和set_xticklabels。前者告诉matplotlib要将刻度放在数据范围中的哪些位置,默认情况下,这些位置也就是刻度标签。但我们可以通过set_xticklabels将任何其他的值用作标签:

等价:

6、添加图例(legend)

在添加subplot的时候传入label参数,在此之后,可以调用ax.legend()或plt.legend()来自动创建图例。

legend方法有几个其它的loc位置参数选项,loc告诉matplotlib要将图例放在哪。"best"是不错的选择,因为它会选择最不碍事的位置。要从图例中去除一个或多个元素,不传入label或传入label='_nolegend_'即可。

7、注解以及在Subplot上绘图

除标准的绘图类型,你可能还希望绘制一些子集的注解,可能是文本、箭头或其他图形等。注解和文字可以通过text、arrow和annotate函数进行添加。text可以将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式:

注解中可以既含有文本也含有箭头。我们根据最近的标准普尔500指数价格(来自Yahoo!Finance)绘制一张曲线图,并标出2008年到2009年金融危机期间的一些重要日期:

 2008-2009年金融危机期间的重要日期

matplotlib有一些表示常见图形的对象。这些对象被称为块(patch)。要在图表中添加一个图形,你需要创建一个块对象shp,然后通过ax.add_patch(shp)将其添加到subplot中。

8、将图表保存到文件

利用plt.savefig可以将当前图表保存到文件。该方法相当于Figure对象的实例方法savefig。

Figure.savefig的选项  

文件类型是通过文件扩展名推断出来的。因此,如果你使用的是.pdf,就会得到一个PDF文件。发布图片时最常用到两个重要的选项是dpi(控制“每英寸点数”分辨率)和bbox_inches(可以剪除当前图表周围的空白部分)

savefig并非一定要写入磁盘,也可以写入任何文件型的对象,比如BytesIO:

9、matplotlib配置

matplotlib自带一些配色方案,以及为生成出版质量的图片而设定的默认配置信息。幸运的是,几乎所有默认行为都能通过一组全局参数进行自定义,它们可以管理图像大小、subplot边距、配色方案、字体大小、网格类型等。一种Python编程方式配置系统的方法是使用rc方法。

rc的第一个参数是希望自定义的对象,如'figure'、'axes'、'xtick'、'ytick'、'grid'、'legend'等。其后可以跟上一系列的关键字参数。一个简单的办法是将这些选项写成一个字典:

matplotlib的配置文件matplotlibrc(位于matplotlib/mpl-data目录中)。如果对该文件进行了自定义,并将其放在你自己的.matplotlibrc目录中,则每次使用matplotlib时就会加载该文件。

二、使用pandas和seaborn绘图

matplotlib实际上是一种比较低级的工具。要绘制一张图表,你组装一些基本组件就行:数据展示(即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)、图例、标题、刻度标签以及其他注解型信息。

在pandas中,我们有多列数据,还有行和列标签。pandas自身就有内置的方法,用于简化从DataFrame和Series绘制图形。Seaborn简化了许多常见可视类型的创建。

1、线形图

Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图:

该Series对象的索引会被传给matplotlib,并用以绘制X轴。可以通过use_index=False禁用该功能。X轴的刻度和界限可以通过xticks和xlim选项进行调节,Y轴就用yticks和ylim。

Series.plot方法的参数:

DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例:

plot的其他关键字参数会被传给相应的matplotlib绘图函数,所以要更深入地自定义图表,就必须学习更多有关matplotlib API的知识。

DataFrame还有一些用于对列进行灵活处理的选项,例如,是要将所有列都绘制到一个subplot中还是创建各自的subplot。

专用于DataFrame的plot参数:

2、柱状图

plot.bar()和plot.barh()分别绘制水平和垂直的柱状图。这时,Series和DataFrame的索引将会被用作X(bar)或Y(barh)刻度,color='k'和alpha=0.7设定了图形的颜色为黑色,并使用部分的填充透明度:

水平和垂直的柱状图

对于DataFrame,柱状图会将每一行的值分为一组,并排显示:

DataFrame各列的名称"Genus"被用作了图例的标题

设置stacked=True即可为DataFrame生成堆积柱状图,这样每行的值就会被堆积在一起:

柱状图有一个非常不错的用法:利用value_counts图形化显示Series中各值的出现频率,比如s.value_counts().plot.bar()

做一张堆积柱状图以展示每天各种聚会规模的数据点的百分比。用read_csv将数据加载进来,然后根据日期和聚会规模创建一张交叉表:

每天各种聚会规模的比例

通过该数据集就可以看出,聚会规模在周末会变大。

在绘制一个图形之前,需要进行合计的数据,使用seaborn可以减少工作量。用seaborn来看每天的小费比例:

小费的每日比例,带有误差条

seaborn的绘制函数使用data参数,它可能是pandas的DataFrame。其它的参数是关于列的名字。因为一天的每个值有多次观察,柱状图的值是tip_pct的平均值。绘制在柱状图上的黑线代表95%置信区间(可以通过可选参数配置)。

 根据天和时间的小费比例

注意,seaborn已经自动修改了图形的美观度:默认调色板,图形背景和网格线的颜色。你可以用seaborn.set在不同的图形外观之间切换:

3、直方图和密度图

直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。再以前面那个小费数据为例,通过在Series使用plot.hist方法,我们可以生成一张“小费占消费总额百分比”的直方图:

小费百分比的直方图

与此相关的一种图表类型是密度图,它是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态分布之类的较为简单的分布)。因此,密度图也被称作KDE(Kernel Density Estimate,核密度估计)图。调用plot时加上kind='kde'或使用使用plot.kde即可生成一张密度图(标准混合正态分布估计)。

seaborn的distplot方法绘制直方图和密度图更加简单,还可以同时画出直方图和连续密度估计图。

4、散布图或点图

点图或散布图是观察两个一维数据序列之间的关系的有效手段。matplotlib的scatter方法是绘制散布图的主要方法。

在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的,这也被称为散布图矩阵(scatter plot matrix)。纯手工创建这样的图表很费工夫,所以pandas提供了一个能从DataFrame创建散布图矩阵的scatter_matrix函数,它支持在对角线上放置每个变量的直方图或密度图。

plot_kws参数可以让我们传递配置选项到非对角线元素上的图形使用

使用seaborn库也能实现上述功能:

5、分面网格(facet grid)和类型数据

要是数据集有额外的分组维度呢?有多个分类变量的数据可视化的一种方法是使用小面网格。seaborn有一个有用的内置函数factorplot,可以简化制作多种分面图。

按照天/时间/吸烟者的小费百分比

除了在分面中用不同的颜色按时间分组,我们还可以通过给每个时间值添加一行来扩展分面网格:

按天的tip_pct,通过time/smoker分面

factorplot支持其它的绘图类型。例如,盒图(它可以显示中位数,四分位数,和异常值)就是一个有用的可视化类型

按天的tip_pct的盒图

三、其它的Python可视化工具

与其它开源库类似,Python创建图形的方式非常多(根本罗列不完)。自从2010年,许多开发工作都集中在创建交互式图形以便在Web上发布。利用工具如Boken和Plotly,现在可以创建动态交互图形,用于网页浏览器。

对于创建用于打印或网页的静态图形,我建议默认使用matplotlib和附加的库,比如pandas和seaborn。

相关文章

  • python生成数据

    数据可视化指: 数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关。 数据挖掘: 数据挖掘指的是使用代...

  • 数据可视化方案

    数据可视化-数据大屏-产品介绍 可视化 大数据时代,数据可视化将成为IT领域一个重点发展方向。数据可视化已经不在是...

  • 数据可视化基础知识

    1. 数据可视化简介 创建图表探索数据并分享结果数据可视化:量化信息的可视化 2. 为何使用数据可视化? 安斯库姆...

  • 第一章 数据可视化简介

    第一章 数据可视化简介 1.1 数据可视化简史 1.1.1 20世纪前的数据可视化 数据可视化有着悠久的历史,并在...

  • 这篇文章你一定要阅读:大数据可视化以及几款数据可视化的工具介绍

    大数据可视化是什么 数据可视化要根据数据的特性,可视化要根据数据的特性,如时间信息和空间信息等,找到合适的可视化方...

  • Python 教程:使用 Matplotlib 和 Seabor

    数据可视化是以图形、图表和其他可视化表示形式表示数据的过程。它通过提供可视化表示来帮助我们理解数据。数据可视化是数...

  • 第三章 数据可视化

    第一章 数据可视化简介 第二章 数据 第三章 数据可视化 3.1 数据可视化流程 数据可视化是一个相当复杂的过程,...

  • 数据可视化<第一天>

    数据可视化 数据可视化是指通过可视化表示来探索数据,它与数据挖掘紧密相关而数据挖掘指的是使用代码来探索数据集的规律...

  • 数据可视化.视频.2017-09-26

    统计学:数据图像化大卫.麦克德里斯:数据可视化之美 Uber数据可视化TED 颠覆性的数据可视化演示(2) 数据可...

  • 基于Python的数据可视化:从一维到多维

    目录 一、iris数据集介绍二、一维数据可视化三、二维数据可视化四、多维数据可视化五、参考资料 一、iris数据集...

网友评论

    本文标题:数据可视化

    本文链接:https://www.haomeiwen.com/subject/vrkebftx.html