網站首頁 編程語言 正文
本文通過一個實際的散點圖案例,展示了如何使用pyqt5嵌套一個pyecharts圖層的方法,通過這個技巧,可以在pyqt5的框架中也實現精美的數據可視化的功能模塊。
技術背景
雖然現在很少有人用python去做一些圖形化的界面,但是不得不說我們在日常大部分的軟件使用中都還是有可視化與交互這樣的需求的。因此pyqt5作為一個主流的python的GUI框架地位是非常重要的,也是一個非常重要的技能。而pyecharts是相當于echarts的python版本,可以比較方便的制作一些非常精美的可視化圖片,因為生成的一般是html格式的,所以對于平臺的可遷移性相對較好。這里我們主要探索一下在pyqt5制作出來的界面中集成一個pyecharts生成的頁面,效果圖如下所示:
環境依賴
這里主要依賴于pyecharts和pyqt5這兩個庫,但是由于pyqt5在5.10.1版本前后經歷了比較大的變革,建議是安裝最新版本的pyqt5,然后額外安裝一個QtWebEngineWidgets的組件(若運行如下程序沒有任何報錯的話就不需要裝):
$ python3 -m pip show pyecharts Name: pyecharts Version: 1.9.1 Summary: Python options, make charting easier Home-page: https://github.com/pyecharts/pyecharts Author: chenjiandongx Author-email: chenjiandongx@qq.com License: MIT Location: /home/dechin/miniconda3/lib/python3.9/site-packages Requires: jinja2, prettytable, simplejson Required-by: $ python3 -m pip show pyqt5 Name: PyQt5 Version: 5.15.6 Summary: Python bindings for the Qt cross platform application toolkit Home-page: https://www.riverbankcomputing.com/software/pyqt/ Author: Riverbank Computing Limited Author-email: info@riverbankcomputing.com License: GPL v3 Location: /home/dechin/miniconda3/lib/python3.9/site-packages Requires: PyQt5-Qt5, PyQt5-sip Required-by: PyQtWebEngine
部分代碼解析
這里我們僅僅摘取一小部分的代碼進行解析,該示例也是從網上找的一個框架做的修改。首先是數據生成的模塊:
import numpy as np nums = 200 data = np.random.random((nums,2)) data = np.sort(data) x_data = data[:,0] y_data = data[:,1]
這里使用numpy來生成一系列的隨機數,然后排序后再進行繪圖,繪圖時采用的pyecharts的Scatter形式散點圖。在pyecharts中配置散點圖的參數時,主要方法是調用Scatter中的函數來進行構造,比如我們常用的一些窗口工具,區域縮放等功能,就可以在Scatter中添加一個toolbox來實現:
toolbox_opts=opts.ToolboxOpts( is_show=True, orient="horizontal", feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(type_="jpeg", title="保存為jpeg", pixel_ratio=2), restore=opts.ToolBoxFeatureRestoreOpts(), data_zoom=opts.ToolBoxFeatureDataZoomOpts( xaxis_index=[0], yaxis_index=[0] ), ) )
這個toolbox中主要實現了網頁另存為圖像的功能、區域縮放的功能,以及返回操作的功能。在通過pyecharts構造了圖層之后,需要通過:
render("/tmp/scatter.html")
的方法將生成的效果圖保存成一個本地的html文件。最后通過pyqt中的圖層中導入網頁,實現圖像的展示效果:
self.mainhboxLayout = QHBoxLayout(self) self.frame = QFrame(self) self.mainhboxLayout.addWidget(self.frame) self.hboxLayout = QHBoxLayout(self.frame) self.myHtml = QWebEngineView() self.myHtml.load(QUrl("file:////tmp/scatter.html")) self.hboxLayout.addWidget(self.myHtml) self.setLayout(self.mainhboxLayout)
總體代碼與展示效果
總體可運行的代碼如下所示:
import pyecharts.options as opts from pyecharts.charts import Scatter from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QFrame from PyQt5.QtWebEngineWidgets import QWebEngineView import sys import numpy as np class Stacked(QWidget): def __init__(self): super(Stacked, self).__init__() self.initData() self.initUI() self.mainLayout() def initUI(self): self.setGeometry(400, 400, 800, 600) self.setWindowTitle(" ") def initData(self): nums = 200 data = np.random.random((nums,2)) data = np.sort(data) x_data = data[:,0] y_data = data[:,1] ( Scatter(init_opts=opts.InitOpts(width="1600px", height="1000px")) .add_xaxis(xaxis_data=x_data) .add_yaxis( series_name="", y_axis=y_data, symbol_size=20, label_opts=opts.LabelOpts(is_show=False), ) .set_series_opts() .set_global_opts( xaxis_opts=opts.AxisOpts( type_="value", splitline_opts=opts.SplitLineOpts(is_show=True) ), yaxis_opts=opts.AxisOpts( type_="value", axistick_opts=opts.AxisTickOpts(is_show=True), splitline_opts=opts.SplitLineOpts(is_show=True), ), tooltip_opts=opts.TooltipOpts(is_show=False), toolbox_opts=opts.ToolboxOpts( is_show=True, orient="horizontal", feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(type_="jpeg", title="保存為jpeg", pixel_ratio=2), restore=opts.ToolBoxFeatureRestoreOpts(), data_zoom=opts.ToolBoxFeatureDataZoomOpts( xaxis_index=[0], yaxis_index=[0] ), ) ) ) .render("/tmp/scatter.html") ) def mainLayout(self): self.mainhboxLayout = QHBoxLayout(self) self.frame = QFrame(self) self.mainhboxLayout.addWidget(self.frame) self.hboxLayout = QHBoxLayout(self.frame) self.myHtml = QWebEngineView() # 打開本地html文件 self.myHtml.load(QUrl("file:////tmp/scatter.html")) self.hboxLayout.addWidget(self.myHtml) self.setLayout(self.mainhboxLayout) if __name__ == '__main__': app = QApplication(sys.argv) ex = Stacked() ex.show() sys.exit(app.exec_())
打開界面效果如下圖所示:
通過點擊區域縮放的功能按鈕,可以在圖上選取一部分的區域進行更加細致的展示,并且具有單步返回和一步復原的功能按鈕。選取一部分之后的展示效果如下圖所示:
總結概要
本文通過一個實際的散點圖案例,展示了如何使用pyqt5嵌套一個pyecharts圖層的方法,通過這個技巧,可以在pyqt5的框架中也實現精美的數據可視化的功能模塊。
版權聲明
本文首發鏈接為:https://www.cnblogs.com/dechinphy/p/pyqtecharts.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/
打賞專用鏈接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
騰訊云專欄同步:https://cloud.tencent.com/developer/column/91958
參考鏈接https://blog.csdn.net/weixin_38416696/article/details/94003119 “留一手”加劇內卷,“講不清”浪費時間。
原文鏈接:https://www.cnblogs.com/dechinphy/p/pyqtecharts.html
相關推薦
- 2022-11-08 切換tab時,van-list中的onload事件沒觸發
- 2022-04-24 如何在Python中隱藏和加密密碼示例詳解_python
- 2022-09-22 描述Servlet生命周期,Servlet是線程安全的嗎? 為什么?
- 2022-08-12 python利用scatter繪畫散點圖_python
- 2022-08-10 pandas.DataFrame.iloc的具體使用詳解_python
- 2022-05-13 python實現圖書館借閱系統_python
- 2023-01-12 C語言技巧提升之回調函數的掌握_C 語言
- 2022-07-11 Jenkins修改端口號, jenkins容器修改默認端口號
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支