当前位置:   article > 正文

34【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 视频平台_数据可视化大屏源代码

数据可视化大屏源代码

效果图展示

1.动态实时更新数据效果图

说明: 其中 今日抓拍,抓拍总数,预警信息统计,监控点位统计图表 做了动态实时更新处理

3a16d4493655406d95d79cdcd2e85b86.gif

 2.静态切片效果图

24c1d654b6b649c2bb00b5844c902caf.png

 

一、确定需求方案

1、确定产品上线部署的屏幕LED分辨率

本案例基于16:9 屏宽比,F11全屏显示。

2、部署方式 

基于免安装可执行程序:支持Windows、Linux、Mac等各种操作系统;将程序复制到服务器上即可,无需其它环境依赖;

观看方式:既可在服务器上直接观看程序界面,也可在远程用浏览器打开播放,例如Chrome浏览器、360浏览器等。

二、整体架构设计

  1. 前端基于Echarts开源库设计,使用WebStorm编辑器;
  2. 后端基于Python Flask实现,使用 Vscode 编辑器;
  3. 数据传输格式:JSON;
  4. 数据源类型:目前采用JSON文件方式,可自行添加支持PostgreSQL、MySQL、Oracle、Microsoft SQL Server、SQLite,自行添加pandas支持Excel表格等,还可以定制HTTP API接口方式。
  5. 数据更新方式:采用http get 轮询方式 。在实际应用中,也可以视情况选择j监测后端数据实时更新,实时推送到前端的方式;

三、编码实现 (关键代码)

1、前端html代码 - 页面布局主要基于div

  1. <body>
  2. <div class="body">
  3. <div class="head-box">
  4. <div class="logout-box"></div>
  5. <div class="link-box"></div>
  6. 南方软件视频平台大屏中心
  7. <div class="time-box" id="time">202291</div>
  8. </div>
  9. <div class="main">
  10. <!--left-->
  11. <div class="col">
  12. <!--巡查视频问题-->
  13. <div class="col-box1">
  14. <div class="col-title">巡查视频问题</div>
  15. <div class="col-main">
  16. <ul class="xcspwt-box js-xcspwt">
  17. <li>
  18. <span>张三丰</span>
  19. <span title="南京信息工程大学地铁站1号出口监控点">南京信息工程大学地铁站1号出口监控点</span>
  20. <span title="视频信号不稳定">视频信号不稳定</span>
  21. </li>
  22. .......
  23. </ul>
  24. </div>
  25. </div>
  26. <!--巡查视频问题统计-->
  27. <div class="col-box1">
  28. <div class="col-title">巡查视频问题统计</div>
  29. <div class="col-main">
  30. <!--视频问题统计-->
  31. <ul class="spwtzgtj-box">
  32. <li>
  33. <span>问题总数</span>
  34. <span>234</span>
  35. </li>
  36. <li>
  37. <span>已整改</span>
  38. <span>34</span>
  39. </li>
  40. <li>
  41. <span>未整改</span>
  42. <span>200</span>
  43. </li>
  44. </ul>
  45. <div class="spwttj-echarts" id="spwttjEchart">
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <!--center-->
  51. <div class="col">
  52. <!--预警信息推送-->
  53. <div class="col-box1">
  54. <ul class="zpsl-box">
  55. <li>
  56. <span>今日抓拍</span>
  57. <span id="today_snap">1245</span>
  58. </li>
  59. <li>
  60. <span>抓拍总数</span>
  61. <span id="total_snap">3421</span>
  62. </li>
  63. </ul>
  64. <div class="col-title">预警信息推送</div>
  65. <div class="col-main js-tjxxtsxq" style="height: calc(100% - 190px);margin-top: 10px">
  66. <div class="yjxxts-box">
  67. <img src="img/12.png">
  68. </div>
  69. <div class="yjxxts-box">
  70. <img src="img/12.png">
  71. </div>
  72. <div class="yjxxts-box">
  73. <img src="img/12.png">
  74. </div>
  75. </div>
  76. </div>
  77. <!--预警信息统计-->
  78. <div class="col-box1">
  79. <div class="col-title">预警信息统计</div>
  80. <div class="col-main ">
  81. <ul class="yjxxtj-title js-tab">
  82. <li class="on">有人统计</li>
  83. <li>无人统计</li>
  84. </ul>
  85. <div class="yjxxtj-box">
  86. <ul class="wgxc-box js-wgxcBox">
  87. <li>
  88. <div class="wgxc-bar"><span id="wgxc_span1" class="wgxc-sl-bar"
  89. style="height:10%"></span></div>
  90. <div class="wgxcName">南京</div>
  91. </li>
  92. ......
  93. </ul>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. <!--right-->
  99. <div class="col">
  100. <!--全市监控点位统计-->
  101. <div class="col-box1">
  102. <div class="col-title">
  103. 全市监控点位统计
  104. </div>
  105. <div class="col-main">
  106. <div class="qsjk-box" id="qsjkdwEcharts">
  107. <!--全市监控点位-->
  108. </div>
  109. </div>
  110. </div>
  111. <!--系统公告&资源下载-->
  112. <div class="col-box1">
  113. <div class="col-title">
  114. <ul class="xtggzlxz-box js-tab js-xtggzlxz">
  115. <li class="on">资源下载</li>
  116. <li>系统公告</li>
  117. </ul>
  118. </div>
  119. <div class="col-main" style=" height:calc(100% - 75px);padding:20px 0;overflow: hidden">
  120. ......
  121. </div>
  122. </div>
  123. </div>
  124. <!--预警信息推送弹框-->
  125. <div class="yjxxts-tkbox js-yjxxtsTkbox">
  126. <img src="img/12.png">
  127. <div class="yjxxts-xqbox">
  128. <div class="col-title">详情</div>
  129. <div class="yjxxts-xqmain">
  130. <table>
  131. <tr>
  132. <td>监控点位</td>
  133. <td>地铁站</td>
  134. </tr>
  135. <tr>
  136. <td>预警时间</td>
  137. <td>2018-10-21</td>
  138. </tr>
  139. <tr>
  140. <td>预警类型</td>
  141. <td>无人在岗</td>
  142. </tr>
  143. <tr>
  144. <td>预警状态</td>
  145. <td>已处理</td>
  146. </tr>
  147. </table>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. </body>

2. 前端JS - echarts图表

b02d67edc8514d16aee8f42efbbad7c4.png

  1. /**全市监控点位统计**/
  2. var loadqsjkdw = function () {
  3. var myCharts = echarts.init(document.getElementById('qsjkdwEcharts'));
  4. var option = {
  5. grid: {
  6. left: '5px',
  7. right: '0%',
  8. bottom: '18%',
  9. top:'10%',
  10. },
  11. tooltip: {
  12. show: "true",
  13. trigger: 'axis',
  14. axisPointer: { // 坐标轴指示器,坐标轴触发有效
  15. type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  16. },
  17. formatter:'{b0}:{c0}'
  18. },
  19. yAxis: {
  20. show:false,
  21. splitLine: {show: false,
  22. lineStyle:{
  23. color:'#353E47'
  24. }
  25. },
  26. axisTick: {show: false},
  27. axisLine: {show: true,
  28. lineStyle:{
  29. color:'#353E47'
  30. }},
  31. axisLabel: {
  32. textStyle: {
  33. color: '#ffffff'
  34. },
  35. formatter:function(value,index){
  36. var r = '';
  37. if(value>100000000){//亿
  38. r = (value/100000000).toFixed(1) + '亿';
  39. }else if(value>10000){//
  40. r = (value/10000).toFixed(1) + '万';
  41. }else{
  42. r = value;
  43. }
  44. return r;
  45. }
  46. }
  47. },
  48. xAxis: [
  49. {
  50. type: 'category',
  51. axisTick: {
  52. show: false
  53. },
  54. axisLine: {
  55. show: true,
  56. lineStyle: {
  57. color: '#353E47',
  58. }
  59. },
  60. axisLabel:{
  61. textStyle:{
  62. color:'#fff'
  63. },
  64. interval:0
  65. },
  66. data: ["南京","苏州","无锡","常州","南通","徐州","淮安","镇江","泰州"]
  67. }
  68. ],
  69. series: [
  70. {
  71. name: '',
  72. type: 'bar',
  73. barWidth:'20px',
  74. itemStyle: {
  75. normal: {
  76. show: true,
  77. color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
  78. offset: 0,
  79. color: '#00d891'
  80. }, {
  81. offset: 1,
  82. color: '#00579a'
  83. }]),
  84. barBorderRadius: 50,
  85. borderWidth: 0,
  86. borderColor: '#333',
  87. }
  88. },
  89. label: {
  90. normal: {
  91. show: true,
  92. position: 'top',
  93. textStyle: {
  94. color: '#fff'
  95. }
  96. }
  97. },
  98. data:qsjkdw,
  99. }
  100. ]
  101. };
  102. myCharts.clear();
  103. myCharts.setOption(option);
  104. myCharts.on("click",function(e){
  105. loadsqjkdw();
  106. });
  107. };

3. 前端JS - 数据定时更新控制

支持在每个echarts图表中独立控制定时更新的间隔。

  1. var init = function () {
  2. updateEcharts();
  3. setInterval(function() {updateEcharts()},2000);//刷新周期设置
  4. xcwttj();
  5. loadqsjkdw();;
  6. };

4. 后端 Python Flask 代码

  1. # -*- coding:utf-8 -*-
  2. import io
  3. import os
  4. import sys
  5. import time
  6. import urllib
  7. import random
  8. import json
  9. from flask import Flask, redirect
  10. # 导入线程模块
  11. import threading
  12. app = Flask(__name__, static_folder="static", template_folder="template")
  13. @app.route('/')
  14. def index():
  15. return redirect('/static/index.html')
  16. @app.route('/get_snap')
  17. def get_snap():
  18. jsonData = {}
  19. jsonData['today_snap'] = random.randint(1, 100)
  20. jsonData['total_snap'] = random.randint(1, 1000)
  21. return json.dumps(jsonData)
  22. @app.route('/qsjkdw')
  23. def qsjkdw():
  24. jsonData = []
  25. for x in range(9):
  26. jsonData.append({"value": str(random.randint(1, 100))})
  27. return json.dumps(jsonData)
  28. @app.route('/get_yjxxtj')
  29. def get_yjxxtj():
  30. jsonData = []
  31. for x in range(6):
  32. jsonData.append(random.randint(1, 100))
  33. return json.dumps(jsonData)
  34. def loop():
  35. time.sleep(10)
  36. pass
  37. # 主程序在这里
  38. if __name__ == "__main__":
  39. # 开启线程,触发动态数据
  40. a = threading.Thread(target=loop)
  41. a.start()
  42. # 开启 flask 服务
  43. app.run(host='127.0.0.1', port=80, debug=True)

四、运行效果

38f1b7e12d134fbda65ea7b3922ff8e6.gif

五、更多案例 


YYDatav的数据可视化大屏《精彩案例汇总》(Python&Echarts源码)_YYDataV的博客-CSDN博客

【工厂扫码打印&扫码装箱&错误追溯系统】完整案例详解(Python&PyQt 源码&Mysql数据库)_YYDataV数据可视化的博客-CSDN博客_pyqt案例

感谢开源分享的前端代码。

 

 

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

闽ICP备14008679号