在互联网时代,每时每刻都在产生大量的数据。而气象领域更是一个“大数据”领域。除地面观测站之外,在轨卫星每年也会产生PB级气象数据,还有大量的数值模式数据。

面对气象领域庞杂的数据集,想要直观的表达信息,可视化可以说是最直接的表达方式之一。而且优秀的可视化可以起到事半功倍的效果。

2017年PyCon大会有一个演讲专门介绍了Python中的可视化库。Python中有很多优秀的可视化工具,大致可以分为三类:

  • 基于 matplotlib 的可视化库(比如seaborn等)
  • 基于JS的可视化库(比如bokeh,plotly等)
  • matplotlib和JS结合的可视化库

可视化库分类

基于matplotlib构建的可视化库

matplotlib是Python中一个低级可视化工具,其提供了两种绘图方式。其中一种类似MATLAB,通过调用函数直接绘图。

这是matplotlib参考MATLAB对低级命令进行了封装,提供了一套函数式绘图接口。

函数式绘图使得使用matplotlib绘图更加方便,而且产生的图达到了出版质量,但是同样也存在一些缺点:

  • 调用细节被掩盖,不便于理解matpltolib的底层操作
  • 绘图处理速度低,尤其是在实时交互和图形快速更新等方面

但是对于不需要利用matplotlib进行开发的使用者来说,无需理解matplotlib的底层操作。对于第二点,如果生产环境对效率要求较高,可以更换其他库,或者在批量生产时采用多进程的方式来加快处理。

作为Python中使用最广泛的可视化工具之一,matplotlib可以绘制大多数常见的图。官方也提供了大量的可视化示例。也可以看这里:

如何用python画图——带你入门matplotlib

如何用python画图–matplotlib实例与补充

但是matplotlib默认设置绘图效果不是非常美观,而且matpltolib在统计绘图方面也不是很给力。而Seaborn则很好的解决了这个问题

Seaborn基于matplotlib,提供了一些更美观的配置选项,而且封装了很多统计绘图函数。所以如果你在做数据分析时,需要进行一些统计分析和可视化,Seaborn则是比较好的选择。前方剧透!!后面会专门对Seaborn进行介绍~~

Seaborn部分可视化示例

气象作为地球科学的分支,气象数据涉及到时间和空间维度,在进行可视化时通常涉及到地理信息的处理。除了常规的折线,柱状图之外,空间分布是进行气象数据可视化时非常重要的一项。

Python中一些库则专门处理涉及地理信息图形的工作,比如Basemap,Cartopy等,由于Basemap和Cartopy的处理效率相对较低,处理步骤相对繁琐,geopandas便应运而生。

geopandas扩展了pandas(pandas中有简单的绘图模块,可以说是提供了数据处理和可视化一条龙服务)的数据类型,从而允许进行几何操作,其目标是使python在地理空间数据处理更加简单。

基于JS的可视化库

除了基于matplotlib的可视化库之外,Python中有很多基于JS的可视化库,其中比较流行的是:Bokeh,HoloViews,Plotly等。基于JS开发的可视化库相对于matpltolib来说,其优势之一是:交互可视化

Bokeh和HoloViews是开源的交互式可视化库,其目标都是期望绘制美观的交互式图形,而且针对大数据流进行优化,以使得数据分析和可视化能够更加简单

Plotly是一个企业级分析工具,其提供了很多语言(比如MATLAB,Python,R等)的接口,可以直接嵌入到BI中。

Bokeh可视化效果

HoloViews可视化示例

上述给出的Bokeh和HoloViews示例均为静态图形,可以前往查看官方示例,以更好的体验基于JS带来的交互式可视化效果

HoloViews是PyViz的产品之一,此外还有一些其他产品,比如GeoViews,专门用来处理地理学数据的交互式可视化。

而且其提供了Bokeh,matplotlibDatashader可视化库的扩展。前往官网可以了解更多关于PyViz的介绍。

GeoViews可视化示例

除了上述可视化库之外,Altair是类似Seaborn用于统计可视化的交互式Python可视化库,其基于Vega和Vega-Lite(两者非基于Python的可视化库)。与Vega一样,都是声明式可视化工具。

Vega和Vega-Lite可视化

Altair可视化效果

此外,还有基于百度的Echarts构建的可视化库—pyecharts,其对Echarts中的很多工具进行了封装,也是进行交互式可视化的选择之一。

上述交互式可视化库主要应用在web端,或者嵌入到Jupyter notebook中。在使用jupyter notebook进行数据分析和可视化时,涉及到地理空间可视化时,可以使用gmaps将数据可视化到google地图并嵌入到jupyter notebook中。

Jupyter notebook中gmaps示例

基于JS的可视化库通常用于构建Web应用,当需要开发气象数据可视化平台时,可以使用基于JS的可视化库。

如果是做气象线下分析那么可以使用基于matpltolib的可视化库,而且matpltolib的绘图质量达到了出版质量要求,对于写论文或者报告来说能够满足要求

如果生产环境中想要批量生产而且对速度有较高要求或者对图形渲染有特别需求,可以尝试一下其它绘图库,比如PyQtGraph。PyQtGraph是基于PyQt4/PySide和numpy的纯Python图形和GUI库,主要应用于数学/科学/工程应用领域。

PyQtGraph支持2D/3D图形绘制,而且还提供了一些高级特征。此外,VisPy和Chaco同样可以完成上述任务。更多信息可以前往各可视化库官网查看。

总结

  • 无交互式可视化需求
    • 一般数据可视化需求: matpltolib能满足需求
    • 有统计分析处理和可视化需求:matplotlib + seaborn
    • 有地理空间可视化需求:matplotlib + Basemap/Cartopy/geopandas
  • 有交互式可视化需求
    • 仅一般数据可视化需求:Bokeh,HoloViews,Pyecharts,lightning等均可
    • 有统计分析需求:Altair
    • 地理空间可视化需求:GeoViews
  • 对处理速度或图形渲染有要求
    • PyQtGraph/Vispy/Chaco等库