序 言
Python 科学可视化的应用领域非常广泛。其涉及形形色色的工具,从最通用、最广泛使用的工具,到更专业、保密的工具。这些工具有些由社区开发,有些则由公司开发。这些工具有的专门用于网络,有的则仅用于桌面,有的处理3D和大数据,有的则针对完美的2D渲染,如图0-1所示。
图0-1
该图是2018年Python在科学可视化领域的概览(部分内容)。该图基于Jake Vanderplas的原创进行调整(详细资源见:https://github.com/rougier/python-visualization-landscape)
面对如此丰富的选择,你可能很难找到最适合自己需求的库,因为你可能不知道某个库的存在。为了帮助你做出选择,可以先问自己几个问题:
是否针对桌面应用或Web渲染?
是否拥有复杂的3D渲染场景?
是否有出版级别的图像质量要求?
是否需要处理海量数据?
这些库的社区是否活跃?
这些库有文档和教程吗?
根据对上述问题的回答,可以决定使用哪个库并投入一些时间学习它。例如,如果需要在浏览器中进行交互式可视化,并与Jupyter无缝集成,那么可以选择Bokeh。如果有非常大的数据并需要在桌面上进行3D可视化,那么vispy或mayavi是很好的选择。如果对快速构建漂亮的图形非常感兴趣,那么seaborn和altair是您的得力助手。另外,如果你从事地球科学工作,那么不能忽视cartopy 等库。在此无法列出所有库,我相信在撰写本书到实际出版本书之间,会诞生出新的可视化库。 pyviz 是一个很好的信息源网站,该网站收纳了很多可视化库的网站链接,并提供最新的活跃库列表。
在这个领域中,Matplotlib具有非常特殊的地位。它最初是由John D. Hunter于2003年创建,目的是可视化大脑皮层电图数据,发展历程如图0-2所示。以下是2003年5月23日发布在Python邮件列表上的官方公告。
图0-2
Matplotlib最初由John D. Hunter编写,第一个公开版本发布于2003年。在John D. Hunter于2012年8月去世前不久,Michael Droettboom被提名为Matplotlib的首席开发人员,Thomas Caswell于2014年加入,并担任现任首席开发人员(截至2021年)。最新版本为Python 3.4(撰写本书时) ,
其仅支持Python 3版本,而Python 2.2版本是兼容Python 2和Python 3的长期支持版本(详细资源见introduction/matplotlib-timeline.py)
Matplotlib
Matplotlib是一个专为Python及PyGTK设计的纯Python绘图库。我的目标是让Python能够轻松生成高质量、符合出版标准的图表,同时保持与MATLAB相似的语法风格,以方便其用户群体使用。需要说明的是,Matplotlib仍处于早期发展阶段,要实现上述目标还需完成多项改进。不过目前它已具备足够绘制美观、简洁的基础图形的能力。
系统要求
Python 2.2、GTK2、pygtk-1.99.x及Numeric数值计算库。
获取方式
请访问项目主页: nitace.bsd.uchicago.edu:8080/matplotlib。
以下是Matplotlib着力优化的核心功能:
便捷的大数据集导航:在图形窗口右击可调出导航工具栏,支持通过滚轮鼠标对X/Y轴进行平移和缩放操作。将滚轮悬停在导航按钮上即可滚动操作。
高效处理海量数据:通过Numeric的裁剪机制,成功应用于含128通道、400Hz采样率持续数分钟的EEG脑电绘图场景,可绘制维度达120 000×128的矩阵。
智能刻度标记与标签生成。
简化常规操作(子图布局、线型颜色设置)。
开放高级控制:提供面向对象接口实现深度定制。
作为类库,Matplotlib可集成至PyGTK应用程序中实现绘图功能。同时提供与MATLAB函数兼容的接口,例如通过以下方式调用:
from matplotlib.matlab import plot, subplot, show, gca
Matplotlib最初的目的是取代流行的 MATLAB 图形引擎,支持不同的平台,具有高质量的光栅和矢量输出,为数学表达式提供支持,并利用Shell进行交互式工作。2003 年进行了第一次官方发布(见图0-2),15 年后,尽管它们已经得到了进一步的开发和完善,但初心不改。如今,Matplotlib 库已成为 Python 科学可视化的事实标准。例如,它曾被用于显示有史以来第一张黑洞照片(见图0-3),此图用于说明引力波的存在。
图0-3
2019年4月10日,事件视界望远镜发布的第一张图像描绘了超巨椭圆星系M87核心的超大质量黑洞,其质量约为太阳质量的70亿倍(详细资源见Wikipedia)
Matplotlib 是一个既多功能又强大的库,可让用户设计非常高质量的图形,适用于科学出版。它既提供了一个简单直观的界面(pyplot),也提供了一个面向对象的架构,让程序编写人员可以调整图形中的任何内容。需要注意的是,它也可以用作常规图形库,以设计非科学图形,正如读者在本书中看到的那样。例如,Matplotlib 时间线图(见图0-2)只是由一条带有标记的线和一些带有样式的注释组成。
本书分为 4 部分。第一部分涉及 Matplotlib 库的基本原理,包括回顾构成图形的各个部分、不同的坐标系、可用的比例和投影,以及介绍一些排版、与颜色相关的概念。第二部分专门用于介绍图形的实际设计。在介绍完生成更好的图形的一些简单规则后,作者将详细介绍 Matplotlib 的默认设置和样式系统,然后深入研究图形组织布局。之后,将探索各种可用的绘图类
型,并了解如何用不同元素装饰图形。第三部分专门讲述更高级的概念,即 3D 图形、优化、动画和工具包。第四部分囊括了展示案例及其分析。
为了图片美观,书中图表中英文没有翻译为中文,重要名词会在注释和正文中翻译。
