Python图形化工具生态系统

用Python创建图形的方式非常多(根本罗列不完)。除了开源库,商业库也不少。

本书主要涉及的是matplotlib,因为它是Python领域中使用最广泛的绘图工具。虽然matplotlib是Python科学计算生态系统的重要组成部分,但它在统计图表的创建和展示方面仍然有许多缺点。MATLAB用户可能会对matplotlib感到熟悉,而R用户(尤其是使用ggplot2和trellis的那些)可能就会比较郁闷了(至少目前是)。虽然matplotlib可以为Web应用创建漂亮的图表,但这通常需要耗费大量的精力,因为它原本是为印刷而设计的。先不管美不美观,至少它足以应付大部分需求。在pandas中,我跟其他开发人员一直都在寻求使数据分析中的大部分绘图工作变得更简单的办法。

广泛使用的图形化工具很多。这里我只列举几个,但建议你研究一下整个生态系统。

Chaco

Chaco(http://code.enthought.com/chaco/)是由Enthought开发的一个绘图工具包,它既可以绘制静态图又可以生成交互式图形,如图8-26所示。它非常适合用复杂的图形化方式表达数据的内部关系。跟matplotlib相比,Chaco对交互的支持要好得多,而且渲染速度很快。如果要创建交互式的GUI应用程序,它确实是个不错的选择。

Python图形化工具生态系统 - 图1

图8-26:Chaco图示例

mayavi

mayavi项目(由Prabhu Ramachandran、Gal Varoquaux等人开发)是一个基于开源C++图形库VTK的3D图形工具包。跟matplotlib一样,mayavi也能集成到IPython以实现交互式使用。通过鼠标和键盘操作,图形可以被平移、旋转、缩放。在第12章中,我用mayavi制作了一张有关广播的插图。我没有给出任何调用mayavi的代码,但你可以在网上找到很多文档和示例。我相信它能成为WebGL(以及相关产品)的替代品,虽然其生成的图形很难以交互的形式共享。

其他库

当然,Python领域中还有许多其他的图形化库和应用程序:PyQwt、Veusz、gnuplot-py、biggles等。我就曾经见过PyQwt被用在基于Qt框架(PyQt)的GUI应用程序中。许多库都还在不断地发展(有些已经被用在大型应用程序当中了)。近几年来,我发现了一个总体趋势:大部分库都在向基于Web的技术发展,并逐渐远离桌面图形技术。下面我要就这个问题多说几句。

图形化工具的未来

基于Web技术(比如JavaScript)的图形化是必然的发展趋势。毫无疑问,许多基于Flash或JavaScript的静态或交互式图形化工具已经出现了很多年。而且类似的新工具包(如d3.js及其分支项目)一直都在不断涌现。相比之下,非Web式的图形化开发工作在近几年中减慢了许多。Python以及其他数据分析和统计计算环境(如R)都是如此。

于是,开发方向就变成了实现数据分析和准备工具(如pandas)与Web浏览器之间更为紧密的集成。我希望这个思路今后能成为Python以及非Python用户之间富有成效的协作手段。