• 35【源码】数据可视化:基于 Echarts + Python 动态实时大屏 - 门店销售业绩数据中心


    效果图展示 

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

    说明: 其中 总销售额,折扣率,完成率,售罄率,同比,商品销售排名 做了动态实时更新处理

     2.静态切片效果图

    一、确定需求方案

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

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

    2、部署方式 

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

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

    二、整体架构设计

    1. 前端基于Echarts开源库设计,使用WebStorm编辑器;
    2. 后端基于Python Flask实现,使用 Vscode 或 Pycharm编辑器;
    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. <!-- 头部模块 -->
    3. <div class="header">
    4. <div class="title">
    5. <span>奶茶门店销售业绩数据中心</span>
    6. </div>
    7. <div class="time">
    8. <span></span>
    9. </div>
    10. <div class="company">
    11. <span>深圳市</span>
    12. <span>一杯奶茶</span>
    13. </div>
    14. </div>
    15. <!-- 主题模块 -->
    16. <div class="main">
    17. <div class="animate">
    18. <!-- 浮动层 -->
    19. <div class="float">
    20. <div class="floating1">
    21. <div id="roate1">
    22. <div class="roate-item">
    23. <p>1111</p>
    24. <span>销售额</span>
    25. </div>
    26. <div class="roate-item">
    27. <p>0.7%</p>
    28. <span>同比</span>
    29. </div>
    30. <div class="roate-item">
    31. <p>77%</p>
    32. <span>完成率</span>
    33. </div>
    34. </div>
    35. <p class="pm">孙一付</p>
    36. </div>
    37. <div class="floating2">
    38. <div id="roate2">
    39. <div class="roate-item2">
    40. <p>2222</p>
    41. <span>销售额</span>
    42. </div>
    43. <div class="roate-item2">
    44. <p>0.6%</p>
    45. <span>同比</span>
    46. </div>
    47. <div class="roate-item2">
    48. <p>66%</p>
    49. <span>完成率</span>
    50. </div>
    51. </div>
    52. <p class="pm2">赵二开</p>
    53. </div>
    54. <div class="floating3">
    55. <div id="roate3">
    56. <div class="roate-item3">
    57. <p>12356</p>
    58. <span>销售额</span>
    59. </div>
    60. <div class="roate-item3">
    61. <p>0.5%</p>
    62. <span>同比</span>
    63. </div>
    64. <div class="roate-item3">
    65. <p>555%</p>
    66. <span>完成率</span>
    67. </div>
    68. </div>
    69. <p class="pm3">王工</p>
    70. </div>
    71. <div class="floating4">
    72. <div id="roate4">
    73. <div class="roate-item4">
    74. <p>12356</p>
    75. <span>销售额</span>
    76. </div>
    77. <div class="roate-item4">
    78. <p>0.4%</p>
    79. <span>同比</span>
    80. </div>
    81. <div class="roate-item4">
    82. <p>44%</p>
    83. <span>完成率</span>
    84. </div>
    85. </div>
    86. <p class="pm4">李工</p>
    87. </div>
    88. <div class="floating5">
    89. <div id="roate5">
    90. <div class="roate-item5">
    91. <p>12356</p>
    92. <span>销售额</span>
    93. </div>
    94. <div class="roate-item5">
    95. <p>0.3%</p>
    96. <span>同比</span>
    97. </div>
    98. <div class="roate-item5">
    99. <p>33%</p>
    100. <span>完成率</span>
    101. </div>
    102. </div>
    103. <p class="pm5">张工</p>
    104. </div>
    105. </div>
    106. <div class="sum">
    107. <div class="data">
    108. <p>总销售额</p>
    109. <span id="sell_total">2621526</span>
    110. </div>
    111. <div class="cicle1"></div>
    112. <canvas id="canvas1"></canvas>
    113. <canvas id="canvas2"></canvas>
    114. <div class="data1">
    115. <div class="qiu">
    116. <p id="qiu1">1%</p>
    117. </div>
    118. <span>折扣率</span>
    119. </div>
    120. <div class="data2">
    121. <div class="qiu">
    122. <p id="qiu2">2%</p>
    123. </div>
    124. <span>售罄率</span>
    125. </div>
    126. <div class="data3">
    127. <div class="qiu">
    128. <p id="qiu3">3%</p>
    129. </div>
    130. <span>完成率</span>
    131. </div>
    132. <div class="data4">
    133. <div class="qiu">
    134. <p id="qiu4">4%</p>
    135. </div>
    136. <span>同比</span>
    137. </div>
    138. </div>
    139. </div>
    140. <div class="charts">
    141. <div class="charts1">
    142. <div class="charts-title">
    143. <span>产品销售情况分析</span>
    144. </div>
    145. <div id="container_sale" class="charts-content1 content"></div>
    146. </div>
    147. <div class="charts2">
    148. <div class="charts-title">
    149. <span>商品销售排名</span>
    150. </div>
    151. <div class="charts-content2 content">
    152. <table>
    153. <thead>
    154. <tr>
    155. <td>排名</td>
    156. <td>门店</td>
    157. <td>销售额</td>
    158. <td>完成情况</td>
    159. </tr>
    160. </thead>
    161. <tbody>
    162. <tr>
    163. <td>01</td>
    164. <td>东门门店</td>
    165. <td id="sell1">25947</td>
    166. <td id="percent1" style="color: #dbbd73">85%<span class="chart1"></span></td>
    167. </tr>
    168. <tr>
    169. <td>02</td>
    170. <td>老街门店</td>
    171. <td id="sell2">25947</td>
    172. <td id="percent2" style="color: #4bd8ba">85%<span class="chart2"></span></td>
    173. </tr>
    174. <tr>
    175. <td>03</td>
    176. <td>华强门店</td>
    177. <td id="sell3">25947</td>
    178. <td id="percent3" style="color: #4bd8ba">85%<span class="chart3"></span></td>
    179. </tr>
    180. <tr>
    181. <td>04</td>
    182. <td>上步门店</td>
    183. <td id="sell4">25947</td>
    184. <td id="percent4" style="color: #4bd8ba">85%<span class="chart4"></span></td>
    185. </tr>
    186. <tr>
    187. <td>05</td>
    188. <td>下沙门店</td>
    189. <td id="sell5">25947</td>
    190. <td id="percent5" style="color: #dbbd73">85%<span class="chart5"></span></td>
    191. </tr>
    192. <tr>
    193. <td>06</td>
    194. <td>南山门店</td>
    195. <td id="sell6">25947</td>
    196. <td id="percent6" style="color: #4bd8ba">85%<span class="chart6"></span></td>
    197. </tr>
    198. </tbody>
    199. </table>
    200. </div>
    201. </div>
    202. </div>
    203. </div>
    204. </body>

    2. 前端JS - echarts图表

    1. function init_echart_bar_ROA(container) {
    2. var chartDom = document.getElementById(container);
    3. var myChart = echarts.init(chartDom, window.gTheme);
    4. var option;
    5. option = {
    6. title: {
    7. // text: "资产负债率",
    8. //top: "5%",
    9. //left: "2%",
    10. textStyle: {
    11. // color: "#00ffff",
    12. fontSize: "16",
    13. },
    14. },
    15. grid: {
    16. left: "3%",
    17. right: "15%",
    18. bottom: "10%",
    19. top: "20%",
    20. containLabel: true,
    21. },
    22. tooltip: {
    23. trigger: "item",
    24. formatter: "{b}日: {c} 亿元",
    25. position: function (p) {
    26. //其中p为当前鼠标的位置
    27. return [p[0] + 10, p[1] - 10];
    28. },
    29. },
    30. xAxis: {
    31. name: "日期",
    32. type: "category",
    33. nameTextStyle: {
    34. color: "rgba(255,255,255,.8)",
    35. fontSize: 12,
    36. },
    37. data: [],
    38. axisLabel: {
    39. textStyle: {
    40. color: "rgba(255,255,255,.8)",
    41. fontSize: 14,
    42. },
    43. },
    44. axisLine: {
    45. lineStyle: {
    46. color: "rgba(255,255,255,.2)",
    47. },
    48. },
    49. splitLine: {
    50. lineStyle: {
    51. color: "rgba(255,255,255,.1)",
    52. },
    53. },
    54. },
    55. yAxis: {
    56. name: "%",
    57. type: "value",
    58. min: 0,
    59. max: 100,
    60. nameTextStyle: {
    61. color: "rgba(255,255,255,.8)",
    62. fontSize: 12,
    63. },
    64. axisLabel: {
    65. textStyle: {
    66. color: "rgba(255,255,255,.8)",
    67. fontSize: 14,
    68. },
    69. },
    70. axisLine: {
    71. lineStyle: {
    72. color: "rgba(255,255,255,.2)",
    73. },
    74. },
    75. splitLine: {
    76. lineStyle: {
    77. color: "rgba(255,255,255,.1)",
    78. },
    79. },
    80. },
    81. series: [
    82. {
    83. data: [],
    84. type: "bar",
    85. showBackground: true,
    86. backgroundStyle: {
    87. color: "rgba(180, 180, 180, 0.2)",
    88. },
    89. },
    90. ],
    91. };
    92. option && myChart.setOption(option);
    93. window.addEventListener("resize", function () {
    94. myChart.resize();
    95. });
    96. }

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

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

    1. var container = "container_sale";
    2. init_echart_bar_ROA(container);
    3. // 定时1s执行数据更新函数
    4. setInterval(function () {
    5. async_echart_bar_ROA(container, path_bar_ROA + "bar_ROA.json");
    6. }, 1000);

    4. 后端 Python Flask 代码

    1. app = Flask(__name__, static_folder="static", template_folder="template")
    2. @app.route('/')
    3. def index():
    4. return redirect('/static/index.html')
    5. # 主程序在这里
    6. if __name__ == "__main__":
    7. a = threading.Thread(target=loop)
    8. a.start()
    9. # 开启 flask 服务
    10. app.run(host='127.0.0.1', port=80, debug=True)

    四、运行效果

    五、更多案例 

    35 源码数据可视化:基于 Echarts + Python 动态实时大屏 - 门店销售业绩数据中心.zip

    https://download.csdn.net/download/lildkdkdkjf/87185085


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

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

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

  • 相关阅读:
    class的流光效果
    Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd
    node连接mongoose数据库流程
    Unity微信小游戏登录授权获取用户信息
    开发环境安装---Visual Studio Code
    navicat连接postgresql报错解决方案
    计组-机器字长、存储字长、指令字长以及和他们有关的机器位数
    【中间件】ElasticSearch:ES的基本概念与基本使用
    探究Kafka原理-1.初识Kafka
    【Web】Java反序列化之CC6--HashMap版
  • 原文地址:https://blog.csdn.net/lildkdkdkjf/article/details/126895274