效果图展示

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

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

2.静态切片效果图

一、确定需求方案

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

                                                南方软件视频平台大屏中心            2022年9月1日                                                                                            巡查视频问题                                            
  • 张三丰 南京信息工程大学地铁站1号出口监控点 视频信号不稳定
  • .......
巡查视频问题统计
  • 问题总数 234
  • 已整改 34
  • 未整改 200
  • 今日抓拍 1245条
  • 抓拍总数 3421条
预警信息推送 预警信息统计
  • 有人统计
  • 无人统计
  • 南京
  • ......
全市监控点位统计
  • 资源下载
  • 系统公告
...... 详情
监控点位 地铁站
预警时间 2018-10-21
预警类型 无人在岗
预警状态 已处理

2.前端JS – echarts图表

/**全市监控点位统计**/    var loadqsjkdw = function () {        var myCharts = echarts.init(document.getElementById('qsjkdwEcharts'));        var option = {            grid: {                left: '5px',                right: '0%',                bottom: '18%',                top:'10%',            },            tooltip: {                show: "true",                trigger: 'axis',                axisPointer: { // 坐标轴指示器,坐标轴触发有效                    type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'                },                formatter:'{b0}:{c0}'            },            yAxis: {                show:false,                splitLine: {show: false,                    lineStyle:{                        color:'#353E47'                    }                },                axisTick: {show: false},                axisLine: {show: true,                    lineStyle:{                        color:'#353E47'                    }},                axisLabel: {                    textStyle: {                        color: '#ffffff'                    },                    formatter:function(value,index){                        var r = '';                        if(value>100000000){//亿                            r = (value/100000000).toFixed(1) + '亿';                        }else if(value>10000){//万                            r = (value/10000).toFixed(1) + '万';                        }else{                            r = value;                        }                        return r;                    }                }            },            xAxis: [                {                    type: 'category',                    axisTick: {                        show: false                    },                    axisLine: {                        show: true,                        lineStyle: {                            color: '#353E47',                        }                    },                    axisLabel:{                        textStyle:{                            color:'#fff'                        },                        interval:0                    },                    data: ["南京","苏州","无锡","常州","南通","徐州","淮安","镇江","泰州"]                }            ],            series: [                {                    name: '',                    type: 'bar',                    barWidth:'20px',                    itemStyle: {                        normal: {                            show: true,                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{                                offset: 0,                                color: '#00d891'                            }, {                                offset: 1,                                color: '#00579a'                            }]),                            barBorderRadius: 50,                            borderWidth: 0,                            borderColor: '#333',                        }                    },                    label: {                        normal: {                            show: true,                            position: 'top',                            textStyle: {                                color: '#fff'                            }                        }                    },                    data:qsjkdw,                }            ]        };        myCharts.clear();        myCharts.setOption(option);        myCharts.on("click",function(e){            loadsqjkdw();        });    };

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

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

 var init = function () {        updateEcharts();        setInterval(function() {updateEcharts()},2000);//刷新周期设置        xcwttj();        loadqsjkdw();;    };

4. 后端 Python Flask 代码

# -*- coding:utf-8 -*-import ioimport osimport sysimport timeimport urllibimport randomimport jsonfrom flask import Flask, redirect# 导入线程模块import threadingapp = Flask(__name__, static_folder="static", template_folder="template")@app.route('/')def index():    return redirect('/static/index.html')@app.route('/get_snap')def get_snap():    jsonData = {}    jsonData['today_snap'] = random.randint(1, 100)    jsonData['total_snap'] = random.randint(1, 1000)    return json.dumps(jsonData)@app.route('/qsjkdw')def qsjkdw():    jsonData = []    for x in range(9):        jsonData.append({"value": str(random.randint(1, 100))})    return json.dumps(jsonData)@app.route('/get_yjxxtj')def get_yjxxtj():    jsonData = []    for x in range(6):        jsonData.append(random.randint(1, 100))    return json.dumps(jsonData)def loop():    time.sleep(10)    pass# 主程序在这里if __name__ == "__main__":    # 开启线程,触发动态数据    a = threading.Thread(target=loop)    a.start()    # 开启 flask 服务    app.run(host='127.0.0.1', port=80, debug=True)

四、运行效果

五、更多案例

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

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

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