Matplotlib 最重要的特性之一就是具有良好的操作系统兼容性(跨平台)和图形显示底层接口兼容性(graphics backend)。Matplotlib 支持几十种图形显示接口与输出格式,这使得用户无论在哪种操作系统上都可以输出自己想要的图形格式。
然而近几年,Matplotlib 的界面与风格似乎有点跟不上时代。新的画图工具,如 R 语言中的 ggplot 和 ggvis,都开始使用 D3js 和 HTML5canvas 构建的网页可视化工具。相比之下,Matplotlib 更显沧桑。目前,新版的 Matplotlib 已经可以轻松实现主流的绘图风格,人们不断在 Matplotlib
虽然已经有了封装后的高级工具,但是掌握 Matplotlib 的语法更能让你灵活地控制最终的图形结果。因此,即使新工具的出现说明社区正在逐渐放弃直接使用底层的 Matplotlib API 画图的做法,但我依然觉得 Matplotlib 是数据可视化技术中不可或缺的一环。
# 把字符串转换成时间类型的函数 # 加载数据并完成时间转换 # 马拉松前半程成绩与全程成绩的对比 # 图中的实点线表示一个人全程保持一个速度跑完马拉松,即上半程与下半程耗时相同 # 然而实际的成绩分布表明,绝大多数人都是越往后跑得越慢 # 如果前后半程差异系数(split difference)小于 0,就表示这个人是后半程加速型选手 # 绘制差异系数的分布图,0 表示前后半程耗时相同 # 后半程加速的选手数量 # 再来看看前后半程差异系数与其他变量有没有相关性 # 用一个矩阵图pairgrid画出所有变量间的相关性 # 从图中可以看出,虽然前后半程差异系数与年龄没有显著的相关性,但是与比赛的最终成绩有显著的相关性 # 全程耗时最短的选手,往往都是在前后半程尽量保持节奏一致、耗时非常接近的人 # 来看男女选手前后半程差异系数的频次直方图 # 有趣的是,在前后半程耗时接近的选手中,男选手比女选手要多很多 # 男女选手的分布看起来几乎都是双峰分布 # 将男女选手不同年龄(age)的分布函数画出来,用小提琴图(violin plot)进行这两种分布的对比 # 对比两个由年龄构成函数的小提琴图。在数组中创建一个新列,表示每名选手的年龄段 # 用小提琴图表示不同性别、年龄段的前后半程差异系数 # 可以看出男女选手的分布差异:20 多岁至 50 多岁各年龄段的男选手的前后半程差异系数概率密度都比同年龄段的女选手低一些(或者可以说任意年龄都如此) # 所有八十岁以上的女选手都比同年龄段的男选手的表现好。这可能是由于这个年龄段的选手寥寥无几,样本太少。 # 再看看后半程加速型选手的数据:他们都是谁?前后半程差异系数与比赛成绩正相关吗? # 用 regplot 为数据自动拟合一个线性回归模型 # 男女选手的前后半程差异系数与比赛成绩 # 似乎有显著后半程加速的选手都是比赛成绩在 15 000 秒,即 4 小时之内的种子选手。 # 低于这个成绩的选手很少有显著的后半程加速。
一个用 Python 做前端的 JavaScript 可视化程序库,支持非常强大的交互可视化功能,可以处理非常大的批数据和 / 或流数据。Python 前端会生成一份 JSON数据结构,通过 Bokeh 的 JS 引擎进行渲染。
Plotly 公司开发的同名开源产品,其设计理念与 Bokeh 类似。由于 Plotly 从一开始就是主打产品,因此得到了高水平的开发支持。可以免费使用。
一个侧重于大数据动态可视化的项目。由于它建立在 OpenGL 接口上并且可以充分利用电脑的显卡,因此可以渲染出令人叹为观止的大型数据可视化图。
与 采用声明式(declarative)图形表示方法,是在数据可视化基础语言多年的研究成果上形成的产品。最终图形渲染是 JavaScript,但是 API 与编程语言无关。这就是用 实现的 Python API。虽然目前还不成熟,但我依然因这款产品也许可以为 Python 和其他编程语言提供相同的数据可视化基础理念而兴奋不已。
Python 社区里的数据可视化空间可谓日新月异,很可能我现在写的这些内容在刚刚出版时就已经过时了。请及时关注 Python 数据可视化的最新进展!