图形可视化是展示数据的一个非常好的手段,好的图表自己会说话。毋庸多言,在Python的世界里,matplotlib是最著名的绘图库,它支持几乎所有的2D绘图和部分3D绘图,被广泛地应用在科学计算和数据可视化领域。但是介绍matplotlib的中文书籍很少,大部分书籍只是在部分章节中提到了matplotlib的基本用法,因此在内容和深度上都力有不逮。《Python数据可视化编程实战(第2版)》则是一本专门介绍matplotlib的译著。70多个方法,轻松入门Python可视化编程。
matplotlib是一个开源项目,由John Hunter发起。关于matplotlib的由来,有一个小故事。John Hunter和他研究癫痫症的同事借助一个专有软件做脑皮层电图分析,但是他所在的实验室只有一份该电图分析软件的许可。他和许多一起工作的同事不得不轮流使用该软件的硬件加密狗。于是,John Hunter便有了开发一个工具来替代当前所使用的软件的想法。当时MATLAB被广泛应用在生物医学界中,John Hunter最初是想开发一个基于MATLAB的版本,但是由于MATLAB的一些限制和不足,加上他本身对Python非常熟悉,于是就有了matplotlib的诞生。
所以,无论从名字上,还是从所提供的函数名称、参数及使用方法,matplotlib都与MATLAB非常相似。对于一个MATLAB开发人员,使用matplotlib会相当得心应手。即使对不熟悉MATLAB的开发人员(譬如我),对其函数的使用也能够一目了然,而且matplotlib有着非常丰富的文档和实例,再加上本书的介绍,学习起来将会非常轻松。
matplotlib命令提供了交互绘图的方式,在Python的交互式shell中,我们可以执行matplotlib命令来实时地绘制图形并对其进行修改。生成的图像可以保存成许多格式,这取决于其所使用的后端,但绝大多数后端都支持如png、pdf、ps、eps和svg等格式。
《Python数据可视化编程实战(第2版)》讲什么?
在本书中,作者对内容进行了整理,剔除了一些与章节联系不是很大的延伸内容,对排版也进行了修改,使得本书在内容编排上更加简洁紧凑。在本书中,作者还引入了pandas和Plot.ly。其中pandas是一个功能强大且高性能的数据分析工具。Plot.ly是一款非常优秀的在线图表工具,它非常注重图表的可操作性及分享。在内容上,第2版更加完整地涵盖了Python数据可视化领域用到的主流工具。限于篇幅,本书不可能对所有工具做完整详细的介绍,但本书所讲的工具能满足读者大部分的数据可视化需要,读者可以根据自己的需要有选择地深入学习。
最好的数据是我们能看到并理解的数据。作为开发人员和数据科学家,我们希望可以创造并构建出最全面且容易理解的可视化图形。然而这并非易事,我们需要找到数据,对它读取、清理、过滤,然后使用恰当的工具将其可视化。本书通过直接和简单(有时不那么简单)的方法解释了进行数据读取、清理以及可视化的流程。
本书涉及如何读取本地数据、远程数据、CSV、JSON以及关系型数据库中的数据。
通过matplotlib,我们能用一行简单的Python代码绘制出一些简单的图表,但是进行更高级的绘图还需要Python之外的其他知识。我们需要理解信息理论和人类的审美学来生成最吸引人的可视化效果。
本书将介绍在Python中使用matplotlib绘图的一些实战练习,以及不同图表特性的使用情况及其用法示例。
定义图表类型——柱状图、线形图和堆积柱状图
虽然我们已经用matplotlib绘制了一些图表,但并没有详细介绍它们是怎么工作的,也没有介绍如何对图表设置以及matplotlib其他的许多功能。本文将介绍并练习一些最基本的数据可视化图表类型,如线形图、柱状图、直方图、饼图,以及它们的变形。
Matplotlib是一个强大的工具箱,能满足几乎所有2D和一些3D绘图的需求。通过示例学习matplotlib是其作者推荐的方式。当以后你需要画一个图表时,就可以找到一个相似的例子,然后做些改动来满足新的需求。
本节将展示基本的图表以及它们的用途。这里介绍的大多数图表都是很常用的,其中有一些是理解数据可视化中更高阶概念的基础。
1.1.1 准备工作
我们从matplotlib.pyplot库的一些常用图表入手,采用一些简单的样本数据开始一些基本的绘图操作,为后面几节内容打基础。
1.1.2 操作步骤
我们先在IPython中创建一个简单的图表。IPython是一个非常不错的工具,它能让我们交互式地改变图表并能即刻查看结果。
(1)在命令行键入以下命令来启动IPython。
(2)导入需要的方法。
(3)然后键入matplotlib plot代码。
图表会显示在一个新打开的窗口中,其默认的外观和辅助信息如图1-1所示。
Matplotlib中的基本图表包括以下元素。
x轴和y轴:水平和垂直的轴线。
x轴和y轴刻度:刻度表示坐标轴的分隔,包括最小刻度和最大刻度。
x轴和y轴刻度标签:表示特定坐标轴的值。
绘图区域:实际绘图的区域。
图1-1
你会注意到我们提供给plot()的值是y轴的值。plot()为x轴提供了默认值,在这里为0~7的线性值。
现在,试着通过plot()的第一个参数添加x轴的值,在刚才的IPython会话中键入以下代码。
注意IPython是如何对输入和输出行进行计数的(In[2]和Out[2])。这能帮助我们记住它在当前会话中的位置,并且IPython还提供了更高级的功能,例如把部分会话保存到Python文件中。在数据分析期间,用IPython做原型设计是得到满意方案的最快捷的方式,我们还可以将特定的会话存到文件中,以备将来重新生成相同的图表。
图表会变成图1-2所示的样子。
图1-2
从图1-2中可以看到,matplotlib通过扩展y轴来适应新的值范围,并且为了让我们能区分出新的图形,自动改变了第二个线条的表示方式(本书使用绘制方式)。
如果不关闭hold属性(通过调用hold(False)方法),所有接下来的图表都将绘制在相同的坐标轴下。这是IPython的pylab模式的默认行为,然而在编写常规Python脚本中,hold属性默认是关闭的。
让我们基于相同的数据集合多生成一些常见的图表来做一下比较。可以在IPython中键入下面的代码,或者在一个单独的Python脚本中运行它。
绘制出来的图表如图1-3所示。
1.1.3 工作原理
通过调用figure()方法,我们创建出一个新的图表。如果给该方法提供一个字符串参数,例如"sample charts",这个字符串就会成为窗口的后台标题。如果通过相同的参数(也可以是数字)调用figure()
方法,将会激活相应的图表,并且接下来的绘图操作都在此图表中进行。接下来,调用subplot(231)
方法把图表分割成2×3的网格。也可以用subplot(3,2,1)这种形式来调用,第一个参数是行数,第二个参数是列数,第三个参数表示图形的标号。接着用几个简单的命令创建垂直柱状图(bar())和水平柱状图(barh())。对于堆叠柱状图,我们需要把两个柱状图方法调用连在一起。通过设置参数bottom=y,把第二个柱状图和前一个柱状图连接起来形成堆叠柱状图。通过调用boxplot()方法可以创建箱线图,图中的箱体从下四分位数延伸到上四分位数,并带有一条中值线。后续我们会继续介绍箱线图。
最后创建了一个散点图来让大家对基于点的数据集合有所了解。当一个数据集合中有成千上万的数据点时,散点图很有可能就更合适了。但这里,我们只是想举例说明相同数据集合的不同展示方式。
1.1.4 补充说明
现在让我们回到箱线图,来解释一下几个重要特征。
默认情况下箱线图会显示以下几部分。
箱体:涵盖四分位数范围的矩形。
中值:箱体中间的一条线。
箱须:延伸到最大值和最小值的竖直的线,不包括异常值。
异常值:箱须之外的点。
为了说明上述的数据项,在接下来的代码中,我们将用同一个数据集合来绘制箱线图和直方图。
生成的图表如图1-4所示。
通过上述对比,我们可以观察到两种图表在数据展现上的差异。左图(箱线图)呈现了前面提到的5个统计数据,右图(直方图)展示了数据集合在给定范围内的分组情况。
《Python数据可视化编程实战(第2版)》
[爱尔兰] 伊戈尔·米洛瓦诺维奇 著
本书是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python最流行的库,通过70余种方法创建美观的数据可视化效果。
全书共9章,分别介绍了准备工作环境、了解数据、绘制并定制化图表、学习更多图表和定制化、创建3D可视化图表、用图像和地图绘制图表、使用正确的图表理解数据、更多的matplotlib知识以及使用Plot.ly进行云端可视化。
今日互动
你最近正在看哪本书?截止9月10日17时,留言+转发本活动到朋友圈,小编将抽奖选出2名读者赠送纸书各1本和1名读者赠送e读版电子书一本(参与活动直达微信端70种方法,轻松入门Python可视化编程)。
长按二维码,可以关注我们哟
每天与你分享IT好文。
在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程
异步图书福利送不停