当前位置:   article > 正文

Python - 生成热力图并显示(PyQt+pyecharts)_powbi生成热力图

powbi生成热力图

1、前言

由于需求,需要在界面端显示热力图(以地图形式),查阅了比较多的资料,对比了C++和Python,发现还是Python对热力图的支持比较好,所以采用了Python作为开发语言。(如果C++有比较好的方式,欢迎交流)

在此记录一下相关的实现方式,以方便日后查阅。

2、pyecharts

Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了。

关于 pyecharts 的强大不用介绍太多,上面那句话就够了。更多内容请访问:https://pyecharts.org/#/zh-cn/intro

3、PyQt

由于是采用Python作为界面开发语言,所以pyqt是一个比较好的选择。更多关于pyqt的内容,请访问:https://blog.csdn.net/bailang_zhizun/article/details/79310419

4、界面显示热力图

由于热力图是通过 pyecharts  生成的,而 pyecharts  生成 的热力图是以 .html 文件的形式保存的,我们当然可以选择通过手动打开html文件的方式来浏览,但作为程序员,有代码为什么要人工呢?

在QT中,提供了相关的类用于显示网页:QWebEngineView,关于 QWebEngineView 的使用方法可以访问QT的官网进行查看,在此不多做叙述。

所以,在pyqt中,我们也通过这个类来显示网页,下面是代码:

  1. class HeatmapWidget(QWidget):
  2. def __init__(self):
  3. super(HeatmapWidget, self).__init__()
  4. # 创建控件
  5. self.frm_show = QFrame() # 最好定义一个frame空间,将QWebEngineView对象放进去
  6. self.main_layout = QHBoxLayout() # 界面主布局
  7. # 用于显示网页
  8. self.my_html = QWebEngineView() # 无干扰情况下的实时热力图的显示
  9. frm_layout = QHBoxLayout() # self.frm_show的布局
  10. frm_layout.addWidget(self.my_html )
  11. self.frm_show.setLayout(frm_layout)
  12. self.main_layout.addWidget(self.frm_show)
  13. self.setLayout(self.main_layout)

 此时,界面就定义好了,界面中包含一个frame控件,然后将QWebEngineView 控件对象放进去。

显示网页:

  1. html_path = "file:///" + os.path.abspath("file.html")
  2. # repr() 函数可以将字符串转换为python的原始字符串(即忽视各种特殊字符的作用)
  3. # 然后再使用eval() 函数将原始字符串转换为正常的字符串,不使用eval 输出的字符串会带有 ' ' 引号。
  4. # str() 和 repr() 都是把对象转换为字符串,但 str() 转换的字符串对用户友好, repr() 转换的字符串对python友好。
  5. new_str = eval(repr(html_path).replace('\\', '/'))
  6. self.my_html.load(QUrl(new_str)) # reload刷新

刷新网页:

self.my_html.reload()               # reload刷新

5、程序打包遇到的问题

5.1、提示找不到pyecharts的相关文件

我在使用pyinstaller打包程序时,使用的 -F 模式,即所有的文件都打包成一个文件(这样会造成生成的文件比较大,启动慢,但好处是只生成了一个文件,看起来简洁)(使用 -c 模式,可以在运行.exe时显示提示信息),但是对于pyecharts的打包并不友好,会造成无法将pyecharts的相关文件打包在一起的问题,即使使用了 --add-data参数也无济于事,所以最终是采用 -D 模式打包程序:

pyinstaller -D -c main.py  # 加入 -c 参数是为了看到运行时的运行提示信息,可以使用 -W 参数,这样就不会显示命令行窗口

在生成之后,将安装的pyecharts模块目录下的datasets和render文件夹拷贝到生成的dist/main/pyecharts目录下(pyecharts为新建文件夹),main为我生成的程序的名称(对应main.py)

 拷贝到->

 这个问题就解决了。

5.2、提示找不到QtWebEngineProcess.exe

提示信息:Could not find QtWebEngineProcess.exe,但是QtWebEngineProcess这个程序是在生成的目录下的,如下所示:

 由此可见,可能这个文件的目录位置不对。

此时,可以把dist/main/PyQt5/Qt/bin 和 dist/main/PyQt5/Qt/resources下面的所有文件复制到dist/main/下就可以了,main是项目名。此时问题就解决了。

当然,此时还有另外一种解决方式,根据运行时提示的信息如下:

在运行时,程序是先在/dist/resources目录下查找是否有Qt WebEngine resources文件,所以,可以将dist/main/PyQt5/Qt/resources拷到dist目录下

然后程序又在/dist/main/qtwebengine_locals目录下查找是否有QtWebEngineProcess.exe,所以可以在/main目录下新建qtwebengine_locals文件夹,然后将dist/main/PyQt5/Qt/bin下的所有文件拷贝到qtwebengine_locals目录下,这样也能正常运行。如下图所示:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/570813
推荐阅读
相关标签
  

闽ICP备14008679号