《Python Qt GUI与数据可视化编程》第14章 Matplotlib数据可视化

第14章 Matplotlib数据可视化

Matplotlib是Python中做数据绘图最常用的一个包,它提供了二维和三维绘图功能,能绘制曲线、直方图、柱状图、饼图、伪色图、等高线图、极坐标图、三维曲面、三维等高线等各种图,具有丰富的绘图定制功能,能在图中使用LaTeX标记输出数学符号和公式,生成具有出版品质的图。

Matplotlib最初是仿照MATLAB的绘图功能开发的,matplotlib.pyplot模块提供了类似于MATLAB的指令式绘图功能,一般介绍Matplotlib绘图功能的书也以介绍这种指令式绘图为主。但是这种方式适合于脚本化的程序中进行数据可视化,不适合于在GUI应用程序中绘图。实际上Matplotlib是完全采用面向对象的方式设计的,图的各个组成元素都有相应的类,通过类的接口可以完全控制Matplotlib的绘图功能,适合于在GUI应用程序中嵌入数据可视化功能。

本章主要介绍Matplotlib的面向对象的绘图功能,介绍Matplotlib绘图涉及的各个主要类的使用,特别是在GUI应用程序中的使用。

14.1 Matplotlib的基本用法

 

14.2 图的主要元素的面向对象操作

要对一个图(Figure)的各个组成元素进行编程操作,首先要搞清楚图的组成元素的名称及其对应的类,然后才可以使用类的属性和接口函数进行操作。

Matplotlib官方例子程序anatomy.py绘制的一个图完整地演示了一个图的各个组成元素,图14-3是anatomy.py运行时显示的图,实例Demo14_1目录下有这个文件,读者也可以从Matplotlib官网下载此程序的最新版本运行,并解读其中的代码。

图14-3 Matplotlib官方例子程序anatomy.py绘制的图

本节通过实例程序Demo14_2演示和介绍Matplotlib绘图的主要对象的操作方法。实例Demo14_2是基于模板mainWindowApp的项目,只有一个主窗口,程序运行时的界面如图14-4所示。

图14-4 示例Demo14_2运行时界面

14.3 交互操作

使用Matplotlib绘图还可以进行一些交互操作,最简单的就是使用与FigureCanvas类对象关联的NavigationToolbar类工具栏对图表进行交互操作。此外,还可以使用FigureCanvas类提供的事件处理功能对鼠标和键盘事件进行响应,从而实现一些交互操作。

图14-9  示例Demo14_3运行时界面

实例Demo14_3演示Matplotlib绘图的一些交互功能的实现,程序运行时界面如图14-9所示。这个程序实现了如下的一些功能:

  • 对NavigationToolbar工具栏对象做了一些改造,使其显示中文标题和提示信息,并且在工具栏上插入了几个由自定义Actions创建的工具栏按钮。
  • 当鼠标在子图上移动时,在状态栏里显示鼠标光标处的坐标数值。
  • 当鼠标移动到一个子图上时,设置显示绿色背景颜色,鼠标离开子图时背景颜色恢复为白色,其功能类似于PyQt5中的hover()事件。
  • 鼠标在曲线序列或散点序列上点击时,可以拾取序列上的数据点,并在状态栏上显示拾取的信息。
  • 使用鼠标滚轮可以对子图进行缩放。NavigationToolbar工具栏提供的缩放功能只有矩形框选择区域放大,或鼠标右键拖动缩放。

14.4 典型二维图的绘制

在UI界面比较复杂时,希望在UI可视化设计时就放置一个类似于FigureCanvas的组件,而不是用代码生成界面组件。为此,我们设计了一个从QWidget继承的绘图组件类QmyFigureCanvas,在这个类里创建一个FigureCanvas对象、一个Figure对象和一个NavigationToolbar工具栏,构成一个绘图组件。在UI窗体可视化设计时,就可以放置一个QWidget组件然后提升为QmyFigureCanvas类,这样方便界面可视化设计。

基于自定义的类QmyFigureCanvas设计的示例Demo14_4,演示了几种常见的二维图的绘制。

图14-16 “火柴杆图”页面

14.5 三维数据绘图

Matplotlib可以绘制一些三维图形,如三维曲面图、三维线网图、三维散点图等。

本节通过实例Demo14_5简单介绍Matplotlib中绘制三维曲面、三维线网图和散点图的方法。三维数据也可以用二维图表现出来,例如一个三维曲面可以投影到X-Y平面上,用颜色表示一个点的Z轴的数值,这就是Axes类中的pcolormesh()、pcolor()等函数绘制的伪色图。

图14-18 示例Demo14_5运行时界面

 

<上一章>               <回主页> 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值