您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python数据可视化:PyQt5 + ECharts框架实例

时间:2020-05-06 10:42:59  来源:  作者:

引言

对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib、Seaborn、Pyqtgraph、Plotly等等,但这些库更适合于后端程序员的软件开发。

实际上在前端网页开发方面,也有很多很多漂亮的界面设计方案,也包括很多很多数据可视化方面的强大控件。基于此,我们是否可以考虑这样一种桌面软件的开发架构方案,即将前端技术融入到Python开发中,结合PyQt界面库,将前端网页界面无缝集成到PyQt的窗口中,大部分的功能依托于前端技术来实现,而PyQt仅作少部分辅助的诸如窗口生成、事件处理等工作,基于这样的架构进行桌面软件的开发,既能充分利用Python的快速开发优点,又能使用成熟的前端技术,应该是一个比较好的软件开发方案。

下面通过一个简单的例子来介绍这种方案的可行性,该例使用Python3语言,利用PyQ5界面库搭建界面窗口框架,然后在窗口中嵌入ECharts库进行数据的可视化。

这儿稍微简单介绍下ECharts库,它是一个使用 JAVAScript 实现的开源可视化库,可流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。它具有丰富的可视化类型, 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭等等。总之,ECharts库是一具非常强大的数据可视化库。

实例运行界面

该例运行界面情况如下图所示:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

使用PyQt5设计软件界面框架,主界面分为上下两部分,上面是一个Widget窗口控件,在里面嵌入网页通过一个柱状图显示某两个公司产品的全年季度销量趋势对比情况,下面加了两个按钮控件,分别控制启停数据的实时更新(使用仿真数据,仅为演示实时绘图刷新功能)及清除工作。

该例子的文件组成结构如下图所示:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

整个工程放在webDemo文件夹中,其中,Main.py、Main.ico、Main.ui分别为主程序、应用程序图标及设计师设计的界面文件,Ui_Main.py为将Main.ui转换为Python后的文件,html文件夹存放了网页相关的文件。

大体设计思路如下:

  1. 前端文件准备:下载ECharts的库文件,这儿使用的是echarts.min.js,编写柱状图网页文件bar.html;
  2. 主界面设计:用设计师设计程序主界面文件Main.ui,并将其转换为对应的.py文件,即Ui_Main.py;
  3. 主程序功能实现:编写主Python程序Main.py,搭建界面,嵌入网页并实现槽函数功能。

前端文件准备

在官网下载库文件echarts.min.js后,剩下的工作是写bar.html文件,其主要内容包括:引入ECharts界面库、定义显示区域大小、定义柱状图样式等等,其代码内容如下,比较好理解,添加了注释:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
         <!-- 引入 echarts.min.js -->
        <script src="echarts.min.js"></script>
        <style type="text/css">
            #main {height:100%; width:100%; position:absolute;}
            body {margin:0px; padding:0px; overflow:hidden;}
        </style>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main"></div>
        <script type="text/JavaScript">
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));

            option = {
                    title: {
                        text: '全年季度销量趋势对比图',
                        left: 'center'
                    },
                    tooltip: {
                        show: true
                    },
                    legend: {
                        data: ['公司A', '公司B'],
                        top: '8%',
                        right: '10%'
                    },
                    xAxis: {
                        type: 'category',
                        data: ['第1季度', '第2季度', '第3季度', '第4季度'],
                        name: '季度 / x',
                        nameLocation: 'center',
                        nameGap: 30
                    },
                    yAxis: {
                        min: 0,
                        max: 100,
                        type: 'value',
                        name: '销量 / y',
                        nameLocation: 'center',
                        nameGap: 40
                    },
                    series: [
                        {
                            name: '公司A',
                            type: 'bar',
                            data: [0, 0, 0, 0]
                        },
                        {
                            name: '公司B',
                            type: 'bar',
                            data: [0, 0, 0, 0]
                        }
                    ]
                };
            myChart.setOption(option);

            function setValue(val1, val2){
                option.series[0].data = val1
                option.series[1].data = val2
                myChart.setOption(option)
            }

            window.onresize = myChart.resize ;

        </script>
    </body>
</html>

注意,在上面代码中,定义了一个setValue函数,其目的是更新两条曲线的数据内容,其数据可由Python语言来调用时传入。

主界面设计

使用设计师设计的主界面Main.ui如下图所示,包含一个QWidget控件及两个按钮控件:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

该界面中涉及到的所有界面对象元素如下图所示:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

主界面设计完成后,即可用PyUIC工具将其转换为Py文件Ui_Main.py。

主程序功能实现

在主程序Main.py文件中,依托于设计师生成的界面文件,创建一个QWidget类用作主窗口的显示,其代码如下:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

主要功能是定义主界面、加载网页文件及实现两个槽函数功能。通过“开始更新数据”按钮来启动或停止定时器函数,实现数据的实时刷新,通过“清空数据”按钮来清除柱状图数据。

主要代码解释如下:

第24-37行,使用QWebEngineView类定义一个webView视图,使用load函数加载网页文件bar.html,然后将其加入到上面的窗口布局中,注意,这儿仅程序初始化时加载了一次。

第39-42行,在定时器函数中刷新柱状图数据,主要是利用了webView页上的runJavaScript函数来运行html文件中的setValue函数,并将产生的两条随机数据传递到该函数中。

第44-52行,控制柱状图数据刷新的启动/停止动作。

第54-56行,通过传入全0数组,清空柱状图数据。

最终,整个主程序代码如下图所示:

 

Python数据可视化:PyQt5 + ECharts框架实例

 

 

总结

至此,整个工程文件就全部完成了,运行程序后,就会出现开始的界面。通过这个例子可以看出,在Python语言中,结合PyQt库完全可以通过前端技术实现数据的可视化甚至界面的搭建,这对前端程序员开发桌面软件来说,无疑是一种比较好的方案。

 

本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!



Tags:Python 数据可视化   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1. 前言在日常工作中,为了更直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,人们常常借助可视化帮助我们更好的给他人解释现象,做到一图胜千文的说明效果。在Python中,常...【详细内容】
2020-05-07  Tags: Python 数据可视化  点击:(34)  评论:(0)  加入收藏
引言对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib、Seaborn、Pyqtgraph、Plotly等等,但这些库更适合于后端程序员的软件开发。实际上在前端网页开发方...【详细内容】
2020-05-06  Tags: Python 数据可视化  点击:(730)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(8)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条