我是 YYDataV数据可视化 

专注于 数据可视化大屏,工厂扫码装箱系统 

我的微信 6550523,多多交流 ~

目录

效果展示

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

2.鼠标右键切换主题

一. 确定需求方案

1. 屏幕分辨率

2. 部署方式

二. 整体架构设计

三.开发思路

1. 数据爬取 requests

2.  数据准备 pandas

四.编码实现 (基于篇幅及可读性考虑,此处展示部分关键代码)

1. 前端html代码

2. 世界疫情地图 echarts world

3. 动态加载数据代码

4. 服务器端 JSON 通信数据定义

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

6.后端 flask 服务器

四. 启动命令

五. 运行效果

六. 源码下载

更多可视化案例


前言:本案例爬取数据源为腾讯疫情数据, 对数据进行分析归类处理,然后制作成32:9超宽分辨率的可视化大屏。

效果展示

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

2.鼠标右键切换主题

代码中预置了12个主题风格,实际开发中可根据实际情况二次增加。

切换主题,我们可以看到:主题的配色变化了另一种风格。

一. 确定需求方案

1. 屏幕分辨率

这个案例的大屏分辨率是32:9,超炫的的宽屏比。

根据电脑分辨率屏幕自适应显示,F11全屏查看;

2. 部署方式 

B/S方式:支持Windows、Linux、Mac等各种主流操作系统;支持主流浏览器Chrome,Microsoft Edge,360等;服务器采用python语言编写,配置好python环境即可。

二. 整体架构设计

  1. 前端Echarts开源库:使用 WebStorm 编辑器;
  2. 后端 http服务器:基于 Python 实现,使用 Pycharm 或 VSCode 编辑器;
  3. 数据传输格式:JSON;
  4. 数据源类型:JSON文件。实际开发需求中,支持定制HTTP API接口方式或其它各种类型数据库,如PostgreSQL、MySQL、Oracle、Microsoft SQL Server、SQLite、Excel表格等。
  5. 数据更新方式:采用http get 轮询方式 。在实际应用中,也可以视情况选择j监测后端数据实时更新,实时推送到前端的方式;

三.开发思路

1. 数据爬取 requests

    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 /537.36'}# 国内疫情数据统计url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'response = requests.get(url, headers=headers)chinaTotal = response.json()['data']['diseaseh5Shelf']['chinaTotal']chinaAdd = response.json()['data']['diseaseh5Shelf']['chinaAdd']dom_list = {"china": {"localConfirm": chinaTotal['localConfirm'],"nowConfirm": chinaTotal['nowConfirm'],"confirm": chinaTotal['confirm'],"dead": chinaTotal['dead'],"localConfirm_": chinaAdd['localConfirmH5'],"nowConfirm_": chinaAdd['nowConfirm'],"confirm_": chinaAdd['confirm'],"dead_": chinaAdd['dead']},}

2.  数据准备 pandas

生成中国地图所需的json数据 - 生成 static/map_china_map/map_china_map.json 文件

    statisGradeCityDetail = response.json()['data']['statisGradeCityDetail']    # 生成中国地图数据# pandas分组求和groupby sumdf = pd.DataFrame(statisGradeCityDetail)gp_df = df[["confirmAdd", "confirm", "nowConfirm"]].groupby(df['province']).sum()# reset_index 将province变成了列,将索引设置成了自然数0 1 2 ...gp_df = gp_df.reset_index()# print(gp_df)# 生成新列名gp_df = gp_df.rename(columns={'province': 'name'})print("4. 生成 map_china_map 图表的数据", gp_df)gp_df.to_json("static/map_china_map/map_china_map.json", orient="records")

四.编码实现 (基于篇幅及可读性考虑,此处展示部分关键代码)

1. 前端html代码

使用bootstrap container-fluid, row, col等实现。

<body id="container_body"><div class="container-fluid"><!-- 外框 1 --><div class="row" id="container_1"><h3 style="color:#f5efef; text-align: center;">30【源码】数据可视化大屏:基于 Echarts +PythonFlask 实现的32-9超宽大屏 - 中国&国际疫情实时追踪 </h3></div><!-- 外框 2 --><div class="row" id="container_2"><!-- 左侧 --><div class="col-3"><!-- 左侧第1行 --><div class="row" style="height: 20%"><div id="container_l1" class="col-3"></div><div id="container_l2" class="col-3"></div><div id="container_l3" class="col-3"></div><div id="container_l4" class="col-3"></div></div><!-- 左侧第2行 --><div class="row" style="height: 44%"><div id="container_l5" class="col"></div></div><!-- 左侧第3行 --><div class="row" style="height: 35%"><div id="container_l6" class="col"><dv-scroll-board id="vue_app" :config="config" /></div></div></div><!-- 中间 --><div class="col-3"><div class="row" style="height: 100%"><div id="container_m1_root" class="col"><div class="div-section"><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_china('container_m1', 'map_china_map/map_china_map.json', 'confirmAdd')">新增确诊</button><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_china('container_m1', 'map_china_map/map_china_map.json', 'confirm')">累计确诊</button><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_china('container_m1', 'map_china_map/map_china_map.json', 'nowConfirm')">现有确诊</button></div><div id="container_m1"></div></div></div></div><!-- 中间 --><div class="col-3"><div class="row" style="height: 100%"><div class="col" id="container_m2_root"><div class="div-section"><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_map_geo_map_world('container_m2', 'map_geo_map_world/map_geo_map_world.json', 'confirmAdd')">新增确诊</button><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_map_geo_map_world('container_m2', 'map_geo_map_world/map_geo_map_world.json', 'confirm')">累计确诊</button><button type="button" class="btn btn-info" style="width: fit-content;"onclick="async_echart_map_geo_map_world('container_m2', 'map_geo_map_world/map_geo_map_world.json', 'nowConfirm')">现有确诊</button></div><div id="container_m2"></div></div></div></div><!-- 右侧 --><div class="col-3"><!-- 第1行 --><div class="row" style="height: 20%"><div id="container_r1" class="col"></div><div id="container_r2" class="col"></div><div id="container_r3" class="col"></div><div id="container_r4" class="col"></div></div><!-- 第2行 --><div class="row" style="height: 44%"><div id="container_r5" class="col"></div></div><!-- 第3行 --><div class="row" style="height: 35%"><div id="container_r6" class="col"><dv-scroll-board id="vue_app_2" :config="config" /></div></div></div></div></div><!-- 鼠标右键切换主题 theme [1/2] --><!-- style="width: 200px;" 必须写在html,不能写在css文件中 --><ul id="right_menu" style="width: 200px;"><li><img src="img/drop-down.png"> 主题列表</li><li>infographic</li><li>macarons</li><li>roma</li><li>shine</li><li>walden</li><li>westeros</li><li>wonderland</li><li>vintage</li><li>purple-passion</li><li>chalk</li><li>dark</li><li>essos</li></ul>
</body>

2. 世界疫情地图 echarts world

function init_echart_map_geo_map_world(container) {var chartDom = document.getElementById(container);var myChart = echarts.init(chartDom, window.gTheme);option = {title: {text: "世界疫情实时数据",top: "2%",left: "center",textStyle: {// color: "hsl(200, 86%, 48%)",fontSize: "20",},},tooltip: {trigger: "item",formatter: function (params) {console.log(params);value = 0;if (params.value) value = params.value;return params.seriesName + "<br>" + params.name + " : " + value + "人";},},visualMap: {type: "piecewise",splitNumber: 5,pieces: [{ gt: 10000 },{ gt: 1000, lte: 9999 },{ gt: 500, lte: 999 },{ gt: 100, lte: 499 },{ gt: 10, lte: 99 },{ gt: 1, lte: 9 },{ lte: 0 },],textStyle: {color: "#fff",},top: "bottom",},geo: [{map: "world",layoutCenter: ["50%", "50%"],zoom: 1.2,roam: true,// 地图放大或缩小的尺寸layoutSize: "100%",selectedMode: "single",label: {emphasis: {show: false,},},// 地图区域的多边形 图形样式。itemStyle: {// 图形阴影颜色。支持的格式同color。shadowColor: "black",// 图形阴影的模糊大小。shadowBlur: 10,// 阴影水平方向上的偏移距离。shadowOffsetX: 2,// 阴影垂直方向上的偏移距离。shadowOffsetY: 2,},// 高亮状态下的多边形和标签样式。emphasis: {itemStyle: {borderWidth: 3,borderColor: "purple",// areaColor: "#ffdead",},},},],series: {name: "累计确诊",type: "map",coordinateSystem: "geo",geoIndex: 0,zoom: 1.2,roam: true,},};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);window.addEventListener("resize", function () {myChart.resize();});
}

3. 动态加载数据代码


function async_echart_map_geo_map_world(container, filename, section) {$.getJSON(filename).done(function (data) {var myChart = echarts.init(document.getElementById(container),window.gTheme);series = "";data_section = [];if (section == "confirmAdd") {series = "新增确诊";data_section = data.map((item) => {return { name: item.name, value: item.confirmAdd };});}if (section == "confirm") {series = "累计确诊";data_section = data.map((item) => {return { name: item.name, value: item.confirm };});}if (section == "nowConfirm") {series = "现有确诊";data_section = data.map((item) => {return { name: item.name, value: item.nowConfirm };});}myChart.setOption({series: { name: series, data: data_section },});}); //end $.getJSON
}

4. 服务器端 JSON 通信数据定义

世界疫情地图数据

[{"name": "Afghanistan","nameChinese": "\u963f\u5bcc\u6c57","confirmAdd": 0,"confirm": 145,"nowConfirm": 139},{"name": "Albania","nameChinese": "\u963f\u5c14\u5df4\u5c3c\u4e9a","confirmAdd": 0,"confirm": 212,"nowConfirm": 169},{"name": "Algeria","nameChinese": "\u963f\u5c14\u53ca\u5229\u4e9a","confirmAdd": 0,"confirm": 511,"nowConfirm": 448},
... ...
]

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

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

 // 定时1s执行数据更新函数setInterval(function () {async_echart_bar_horizontal(container,path_bar_horizontal + "bar_horizontal.json");}, 1000);

6.后端 flask 服务器

from flask import Flask
app = Flask(__name__, static_folder="static", template_folder="template")# 主程序在这里
if __name__ == "__main__":# 开启线程,触发动态数据a = threading.Thread(target=asyncJson.loop)a.start()# 开启 flask 服务app.run(host='0.0.0.0', port=88, debug=True)

四. 启动命令

<!-- 启动server命令 -->
python main.py <!-- 浏览器中输入网址查看大屏(端口为 main.py 中的 port 参数定义) -->
http://localhost:88/static/index.html<!-- 更多资料参考我的博客主页  -->
https://yydatav.blog.csdn.net/<!-- 更多案例参考 -->
https://blog.csdn.net/lildkdkdkjf/article/details/120705616我的微信号:6550523  欢迎多多交流

五. 运行效果

六. 源码下载

30【源码】数据可视化:基于Echarts+PythonFlask实现的32-9超宽大屏-中国&国际疫情实时追踪-企业管理文档类资源-CSDN下载

更多可视化案例

YYDatav的数据可视化《精彩案例汇总》_YYDataV的博客-CSDN博客

30【源码】数据可视化大屏:基于 Echarts + Python Flask 实现的32-9超宽大屏 - 中国国际疫情实时追踪相关推荐

  1. 【19】数据可视化+爬虫:基于 Echarts + Python 实现的动态实时大屏范例 - bilibili排行榜

    目录 ❤️效果展示❤️ 1.首先看动态效果图 2.丰富的主题样式 一. 确定需求方案 1.确定产品上线部署的屏幕LED分辨率 2.部署方式 二.整体架构设计 三.爬虫采集关键编码实现 1.确定爬虫目标 ...

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

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

  3. 【25】数据可视化:基于 Echarts + Python Flask框架动态实时大屏范例 - 企业宣传

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

  4. 29【源码】数据可视化大屏:基于 Echarts + Python Flask 实现的32-9超宽大屏 - 企业综合信息

    我是 YYDataV数据可视化  专注于 数据可视化大屏,工厂扫码装箱系统 等 我的微信 6550523,多多交流 ~ 本案例为32:9超宽分辨率的大屏. 效果展示 1.动态实时更新数据效果图 2.鼠 ...

  5. 33【源码】数据可视化:基于 Echarts + Python Flask 动态实时大屏 - 制造业生产管理看板

    效果展示 1.动态实时更新数据效果图 2.鼠标右键切换主题 一.确定需求方案 1. 屏幕分辨率 这个案例的分辨率是16:9,最常用的的宽屏比. 根据电脑分辨率屏幕自适应显示,F11全屏查看: 2. 部 ...

  6. 【2】数据可视化:基于 Echarts + Python 实现的动态实时大屏 - 物流大数据

    目录 精彩案例汇总 效果展示 一. 确定需求方案 1.确定产品上线部署的屏幕LED分辨率 2.功能模块 3.部署方式 二.整体架构设计 三.编码实现 (基于篇幅及可读性考虑,此处展示部分关键代码) 1 ...

  7. 【1】数据可视化:基于 Echarts + Python 实现的动态实时大屏 - 互联网企业数据

    目录 精彩案例汇总 效果展示 1.首先看动态效果图 2.再看实时分片数据图 一. 确定需求方案 1.确定产品上线部署的屏幕LED分辨率 2.功能模块 3.部署方式 二.整体架构设计 三.编码实现 (基 ...

  8. 【4】数据可视化:基于 Echarts + Python 实现的动态实时大屏 - 厦门市某医院

    目录 精彩案例汇总 效果展示 1.首先看动态效果图 2.再看实时分片数据图 一. 确定需求方案 1.确定产品上线部署的屏幕LED分辨率 2.功能模块 3.部署方式 二.整体架构设计 三.编码实现 (基 ...

  9. (附源码)计算机毕业设计SSM基于大数据的汽车流量监控

    (附源码)计算机毕业设计SSM基于大数据的汽车流量监控 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(I ...

  10. java spark淘宝大数据分析可视化系统(源码+数据+报告)

    下载地址:https://download.csdn.net/download/a13689028602/18298100 项目介绍 java spark淘宝大数据分析可视化系统(源码+数据+报告) ...

最新文章

  1. Jupyter 官方神器:可视化 Debug 工具!
  2. 安卓如何运行python_如何在android上运行Python代码?
  3. HANA live report - metadata retrieve - where I can find it in HANA studio
  4. 2013年最值得我们学习的网页作品示例【系列六】
  5. 窗体控件绑定泛型数组 0104 c#
  6. 51单片机基本刷屏测试实验_51单片机实验
  7. myeclipse9安装SVN插件
  8. 前端传递数据超过2M不能传给后台
  9. python怎么读写文件-一文看懂Python文件的读取写入操作,建议收藏-bak文件怎么打开...
  10. linux内核虚拟内存之高端物理内存与非连续内存分配
  11. java如何获取scanner_java – 使用Scanner获取用户输入
  12. ABAQUS二次开发手册【随书代码使用说明】
  13. 自学编程的30岁男人,能按应届生那样找工作吗?
  14. 装配作业指导书是什么?装配作业指导书主要包括哪些内容?
  15. 红绿灯记忆游戏-第13届蓝桥杯Scratch选拔赛真题精选
  16. 中原工学院校园网一键登录
  17. Android 10 添加 lunch
  18. NSDate-日期类nbsp;OC——第七天(1)
  19. android wcf 上传文件,第二篇 ( wcf 与 android 图片上传下载)
  20. 前端大屏模板分享-可在线浏览

热门文章

  1. 百度网盘加速下载(pc端)
  2. python判断素数程序_python判断素数程序_Python程序检查素数
  3. c语言标准差公式标准差数组,Excel标准差计算函数Stdev和StdevP的用法与区别,包含4个实例...
  4. 抖音小程序服务器域名,抖音小程序使用场景、3大入口详细介绍
  5. DDoS的攻击方式和防御方法
  6. Mac中如何卸载pkg包
  7. win7 OneNote不能登录一直登录
  8. 非阻塞套接字及select模型 select(0,fread,NULL,NULL,timeOut);
  9. React-native实现联系人列表分组组件(支持拼音搜索)
  10. html设置字体为小型大写字母,css – 启用小型大写字母