文章目录

  • 1. big_screen项目说明
  • 2. big_screen项目文件布局
  • 3. 四大模块核心代码分析
    • 3.1 数据准备模块
    • 3.2 flask网页服务模块
    • 3.3 网页视图模块
      • a. 网页大标题
      • b. 左右两栏的图表
      • c. 中间一栏的图表
      • d. 图表echarts属性设置
    • 3.4 static静态元素分析
      • a. 显示时间的函数
      • b. 页面淡入和视图自适应的函数
  • 4. 总结

1. big_screen项目说明

源自github上逛到的一个项目,用flask和echarts实现了一个大屏幕显示,运行app.py后,在网页上输入如下url地址就能看到效果,如图。

项目地址:https://github.com/xiaokai1996/big_screen

经过自己的研究分析,发现网页最底下一层是一个蓝色的背景,带有一个跟随鼠标的粒子动态特效,接着在这个上面叠加了一个table。

table的布局如下所示,首先是一个标题,标题的右侧是天气和时间。接着是分为三列,左侧三列显示3个图表,中间一列显示两个类似数字时钟的数据和文字说明,右边一列显示3个图表。其中左下角的图表由3个小的图表组合而成。

2. big_screen项目文件布局

项目主要由4个部分组成,data部分是数据准备,app部分是flask服务,templates部分控制网页的显示,这三者正好对应MVC的设计模式。最后的static里面主要保存一些网页元素,例如字体格式、图片等等,以及必要的一些js函数库。下面就这四个部分做一个简要的注释。

3. 四大模块核心代码分析

3.1 数据准备模块

这里有3个数据,以data.py为例,文件中,定义了一个数据类,初始化的时候产生详细的数据,然后定了一个函数返回格式化的数据。

图表的数据用json格式保存,在返回给pyecharts的时候用get函数组装成数组的形式。

class SourceDataDemo:def __init__(self):# 整个网页的标题self.title = '大数据可视化展板通用模板'# 总共是6个图表,数据格式用json字符串,这是第1个图标的数据self.echart1_data = {'title': '行业分布','data': [{"name": "商超门店", "value": 47},{"name": "教育培训", "value": 52},{"name": "房地产", "value": 90},{"name": "生活服务", "value": 84},{"name": "汽车销售", "value": 99},{"name": "旅游酒店", "value": 37},{"name": "五金建材", "value": 2},]}@propertydef echart1(self):data = self.echart1_dataechart = {'title': data.get('title'),# 第一次get获取到的是许多键值对,所以需要对每个键值对再次get'xAxis': [i.get("name") for i in data.get('data')],'series': [i.get("value") for i in data.get('data')]}# 返回的是标题和对应的数据,并没有说用什么方式展现!return echart

3.2 flask网页服务模块

准备好了数据之后,就可以把数据放到html中调用pyecharts进行渲染,这里使用flask服务,将URL根目录和index.html绑定。

# 新建一个flask服务
app = Flask(__name__)# 建立一个URL连接
@app.route('/')
def index():# 新建一个实例data = SourceData()# 在这里传入数据,发送给index进行渲染return render_template('index.html', form=data, title=data.title)# 运行flask
if __name__ == "__main__":app.run(host='127.0.0.1', debug=False)

3.3 网页视图模块

首先是jquery和css文件的加载,jquery是js的一个函数库,css决定了整个网页的字体字号颜色等风格。

然后是一个加载动画,这个加载动画使得网页加载具有淡入的效果,并且确保了网页在拉伸的时候能自适应调整布局,关于这个函数后面再详细解释。

最后是echarts的函数库和中国地图的函数库。

<head><meta charset="utf-8"><title>刘凯凯的大屏幕</title><script type="text/javascript" src="../static/js/jquery.js"></script><link rel="stylesheet" href="../static/css/comon0.css">
</head>
<script type="text/javascript" src="../static/js/loading.js"></script>
<script type="text/javascript" src="../static/js/echarts.min.js"></script>
<script type="text/javascript" src="../static/js/china.js"></script>

接下来加载网页的背景,是一个有动态粒子的效果,粒子效果如图所示

<!--这是一个动态的粒子效果图,设置了透明度为0.2-->
<div class="canvas"style="opacity: 0.9"><iframe frameborder="0" src="../static/js/index.html"style="width: 100%; height: 100%"></iframe>
</div>

在正式页面加载进来之前,还有一个小的loading动画,配合一个gif文件和说明文字实现

<!--这是一个在正式页面加载进来之前显示的加载小动画,文字可以修改-->
<div class="loading"><div class="loadbox"><img src="../static/picture/loading.gif"> 我正在加载中...</div>
</div>

接下来就是整个网页的布局了,网页整体上是如下的一个table布局,首先是一个标题,标题的右侧是天气和时间。接着是分为三列,左侧三列显示3个图表,中间一列显示两个类似数字时钟的数据和文字说明,右边一列显示3个图表。其中左下角的图表由3个小的图表组合而成。

a. 网页大标题

网页大标题放在h1格式里面,然后是天气和时间显示。

天气直接加载一张图片完成,时间用一个js函数实现,每秒刷新。

<div class="head"><h1>{{title}}</h1><div class="weather"><img src="../static/picture/weather.png"><span>我是天气</span><span id="showTime"></span></div><script type="text/javascript" src="../static/js/showtime.js"></script>
</div>

效果如图。

b. 左右两栏的图表

左右两侧的布局相似,左侧的第3个图表较为特殊,是3个小的环状图的组合图表。

每一列用<li>隔开,内部用<div>分隔。

<li><div class="boxall"style="height: 3.2rem"><div class="alltitle">{{form.echart1.title}}</div><div class="allnav" id="echart1"></div><div class="boxfoot"></div></div><div class="boxall"style="height: 3.2rem"><div class="alltitle">{{form.echart2.title}}</div><div class="allnav" id="echart2"></div><div class="boxfoot"></div></div><div class="boxall"style="height: 3.2rem"><divstyle="height:100%; width: 100%;"><div class="sy" id="fb1"></div><div class="sy" id="fb2"></div><div class="sy" id="fb3"></div></div><div class="boxfoot"></div></div>
</li>

c. 中间一栏的图表

中间一栏有3个部分组成,第一部分是显示数据,第二部分是显示文字,第三部分是显示一个地图。

地图包含4个图层,分别是用小地球本体,一个像魔方一样的网,一个光环,和一个中国地图。

<li><div class="bar"><div class="barbox"><ul class="clearfix"><li class="pulll_left counter">{{form.counter.value}}</li><li class="pulll_left counter">{{form.counter2.value}}</li></ul></div><div class="barbox2"><ul class="clearfix"><li class="pulll_left">{{form.counter.name}}</li><li class="pulll_left">{{form.counter2.name}}</li></ul></div></div><div class="map"><div class="map1"><img src="../static/picture/lbx.png"></div><div class="map2"><img src="../static/picture/jt.png"></div><div class="map3"><img src="../static/picture/map.png"></div><div class="map4" id="map_1"></div></div>
</li>

d. 图表echarts属性设置

为了便于理解,这里省略了很多格式,做成类pythonic的结构。

首先是设置option,包含背景颜色、图表大小间距、坐标轴、图表类型等等,然后用option参数来配置图表样式。

<script>
$(function echarts_1() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('echart1'));option = {backgroundColor: '#00265f',         // 设置背景颜色这个背景颜色是不透明的tooltip:                          // 设置鼠标悬浮图表trigger: 'axis',axisPointer: {type: 'shadow'}},grid:                               // 设置图表显示范围left: '0%',top: '0%',right: '0%',bottom: '4%',containLabel: true   // 表示坐标轴label标签也是grid图表的一部分xAxis:                              // 对x轴系列选项进行设置type: 'category',data: {{form.echart1.xAxis|safe}},axisLine: ...axisTick: { show: false,},axisLabel:  {interval: 0,rotate:50,        // 坐标轴文字旋转角度show: true,splitNumber: 15,textStyle: {color: "rgba(255,255,255,.6)",fontSize: '12',...yAxis:                              // 对y轴系列选项进行设置...series:                          // 对具体的图表类型进行设置type: 'bar',data: {{form.echart1.series|safe}},barWidth:'35%', //柱子宽度itemStyle: normal: color:'#2f89cf',opacity: 1,barBorderRadius: 5,};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize",function(){myChart.resize()});
</script>

使用上述配置得到的图表如下,有背景颜色的区域就是grid区域

3.4 static静态元素分析

static中的大部分为静态元素,例如一些图片,字体,文字样式等等。

这里的index.html和template下的index.html文件不一样,这里的文件其实是一个动态粒子的html页面,被当做半透明背景引入到正式的index文件中。这里的index.html可以单独打开,通过内嵌的js函数可以实现下图的这种效果。

另外包含一些函数。其中有3个函数为外部应用函数,类似于python中import的类库,分别是echarts函数库,jquery函数库和中国地图china函数库。剩下的为自定义函数,一个是控制显示时间的函数,另一个是页面淡入显示和窗口自适应的函数。

a. 显示时间的函数

设定一个定时器,每1000ms获取一次时间,然后把时间格式化成年月日时分秒的格式。

var t = null;
t = setTimeout(time,1000);//開始运行,每1000ms运行一次time函数?
function time()
{clearTimeout(t);//清除定时器dt = new Date();var y   = dt.getFullYear();var mt  = dt.getMonth()+1;var day = dt.getDate();var h   = dt.getHours();//获取时var m   = dt.getMinutes();//获取分var s   = dt.getSeconds();//获取秒document.getElementById("showTime").innerHTML = y+"年"+mt+"月"+day+"日"+"-"+h+"时"+m+"分"+s+"秒";t = setTimeout(time,1000); //设定定时器,循环运行
}

b. 页面淡入和视图自适应的函数

//如果把这段注释掉,会一直停留在加载的页面上
$(window).load(function(){$(".loading").fadeOut()})//这个是自适应调整窗口大小的函数,如果没有,整个页面布局会很混乱
$(document).ready(
function(){var whei=$(window).width()$("html").css({fontSize:whei/20})$(window).resize(function(){var whei=$(window).width()$("html").css({fontSize:whei/20})});}
);

4. 总结

大概花了2天的时间看完这个项目,一开始看的一头雾水,仔细分析一下,其实用的都是蛮简单的技术,主要用了这三个技术

  • 后端:flask
  • 可视化:echarts
  • 前端:HTML+JavaScript+css

后续如果继续深入研究,后端框架可以换成高性能的tornado或者功能更强大的Django,可视化的组件可以换成pyecharts,前端可以使用vue,react框架等。还可以考虑加入sqlite数据库或连接db数据库,打造成一个更完整的项目。

项目地址:https://github.com/xiaokai1996/big_screen

用flask+echarts打造一个数据可视化大屏幕相关推荐

  1. Flask+Echarts搭建全国疫情可视化大屏

    Flask+Echarts搭建全国疫情可视化大屏 1.前言 2.实现 2.1 搭建flask应用 2.2 编写html及其对应css代码 2.3 可视化展示 2.3.1 左上角板块 2.3.2 中间上 ...

  2. (毕设1)爬虫+mysql+flask+echarts实现网站数据可视化(附源码)

    目录 1. 项目要求与内容 ?2.数据爬取 2.1分析url,网页源码 2.2编写代码 2.3 数据清洗 3.数据存储 3.1?mysql中需要建立的6张表 3.2 建表语句 3.3将2中清洗后的数据 ...

  3. 数据可视化大屏幕的功能和亮点

    Smartbi数据大屏幕适用于大型的管理机构,信息量高度集中,相比仪表盘来说弱化交互性,强化炫酷的展示效果.Smartbi支持非常灵活的布局.样式和图形效果,并且设计.上线速度极快,远超各种开发技术实 ...

  4. 星痕 轻松实现大屏数据可视化_买大数据可视化大屏幕,看这篇文章就够了

    近年来,随着融媒体中心.智慧城市及安防产业的快速发展,拼接大屏逐渐成为各演播大厅.指挥控制室等场所不可或缺的一份子.形形色色的大屏专用名词,如LCD.LED.DID.DLP等,让不少人应接不暇.在这里 ...

  5. elementui的tree组件页面显示不出数据_只要10分钟,教你配置出炫酷的数据可视化大屏...

    在电影<摩天营救>中,监控中心的全方位展示屏幕给人印象深刻.现在这种立体化大屏幕似乎成了好莱坞大片的标配.其实,这种逼格很高的镜头就是一个数据可视化大屏.随着社会信息化的高速增长,数据可视 ...

  6. Datav:从零开始的数据可视化大屏搭建系统

    本文首发于「Shopee技术团队」微信公众号 摘要 随着 Shopee 业务数据的不断扩大,仅通过表格这样的数据分析方式已经无法满足日常的数据分析需求,丰富的图表分析 Dashboard 就显得格外重 ...

  7. 炫酷大屏demo_只要10分钟,教你配置出炫酷的数据可视化大屏

    在电影<摩天营救>中,监控中心的全方位展示屏幕给人印象深刻.现在这种立体化大屏幕似乎成了好莱坞大片的标配.其实,这种逼格很高的镜头就是一个数据可视化大屏. 随着社会信息化的高速增长,数据可 ...

  8. 使用Vue实现数据可视化大屏功能(一)

    导语   现在在很多的工程项目中,都有有关于数据大屏相关的监控内容,这里我们就来看一下如何用Vue来搭建一个数据可视化大屏应用. 创建项目   使用WebStorm工具创建一个Vue的项目.如下图所示 ...

  9. 27【源码】数据可视化大屏:基于 Echarts + Python Flask 实现的32-9超宽大屏范例 - 监控指挥中心

    目录 效果展示 1. 效果动图 2. 多种主题效果 一. 确定需求方案 1. 屏幕分辨率 2. 部署方式 二. 整体架构设计 三. 编码实现 (基于篇幅及可读性考虑,此处展示部分关键代码) 1. 前端 ...

最新文章

  1. php移动端网页上传图片,[PHP]移动端网页如何使用JqueryMobile+PHP实现上传图片的功能 | 学步园...
  2. Java 加密 base64 encode
  3. Windows下Jenkins的详细安装及使用
  4. 数学建模论文写作要求
  5. OracleDBV工具说明
  6. 金蝶kis专业版 服务器系统,金蝶kis专业版服务器设置
  7. 51单片机学习笔记——串口通信
  8. [游戏杂谈]浅谈游戏打击感
  9. [CMU 15-445] 17 两阶段封锁协议
  10. exercise006_字符串的全排列
  11. 如何看待IT行业发展前景,就业前景和人才需求趋势
  12. 小红书行业黑话大全,小红书专业术语一手掌握
  13. 云计算Linux运维——Linux系统——软件管理
  14. java微信扫码登录代码在这里
  15. Python中break语句和continue语句的用法
  16. LC5454.统计全1子矩阵(矩阵统计)
  17. zabbix报警-邮件-钉钉
  18. 带你读AI论文丨SP21 Survivalism: Living-Off-The-Land 经典离地攻击
  19. 【CSS3 霓虹字体特效】
  20. 【css】浮动和定位对元素的宽度-外边距或其他元素的影响

热门文章

  1. 中国现代书画家——张福民、高俊祥、张晓东、潘江海
  2. 怎么把aac转化为mp3?
  3. 如何正确使用网格设置制作卡片类型展示页面
  4. 30年30首诗入选榜单
  5. 计算机应用的最广领域,目前计算机应用最广的领域是( )
  6. Noip2019暑期训练2 反思
  7. Hadoop HA 是什么?架构?
  8. 吊打面试官:Android中高级面试题 -- 终局之战
  9. 电商数据分析:GROW品类增长模型
  10. html——仿e签宝合同归档html页面实现(纯静态,类似收藏夹页面)