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

目录

效果展示

多主题样式

一、 确定需求方案

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

2、部署方式 

二、整体架构设计

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

1、前端html代码 - 页面整体布局 

2、前端JS代码 - Echarts option设置

3、JSON 数据通信格式定义

4、前端数据定时更新控制

5、后端 flask 服务器

四、上线运行效果

五、启动命令

 六、源码下载

 更多精彩案例


写在前面,最近收到了小伙伴的建议,大屏的HTTP服务器是否可以由原来最简单的HTTPSERVER,再支持下 Python Flask 框架,这个框架在他们的工作中比较常用,又便于灵活扩展,所以应小伙伴之建议,诞生了这篇【基于 Echarts + Python Flask框架动态实时大屏范例 - 企业宣传】案例。

效果展示

  

  

一、 确定需求方案

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

根据电脑分辨率屏幕自适应显示,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 轮询方式 。在实际开发需求中,采用后端数据实时更新,实时推送到前端这种方式具有实用性;

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

1、前端html代码 - 页面整体布局 

<div class="container_fluid">
        <!-- 标题栏 -->
        <div class="row_fluid">
            <div id="container_1" class="col-xs-12 col-md-12">

            </div>
        </div>

        <!-- 上栏 -->
        <div class="row_fluid">

            <!-- 上左栏 -->
            <div id="container_2" class="col-xs-12 col-md-4">
                <div id="container_2_1" class="col-xs-12 col-md-6">
                </div>
                <div id="container_2_2" class="col-xs-12 col-md-6">
                </div>
                <div id="container_2_3" class="col-xs-12 col-md-12">
                </div>
            </div>

            <!-- 上中栏 -->
            <div id="container_3" class="col-xs-12 col-md-4">
                <iframe src="myimg/video.mp4" scrolling="no" border=0 frameborder="no" framespacing=0
                    allowfullscreen="true" width="100%" height="100%"> </iframe>
            </div>

            <!-- 上右栏 -->
            <div id="container_4" class="col-xs-12 col-md-4">
                <div id="container_4_1" class="col-xs-12 col-md-3">
                </div>

                <div id="container_4_2" class="col-xs-12 col-md-3">
                </div>

                <div id="container_4_3" class="col-xs-12 col-md-3">
                </div>

                <div id="container_4_4" class="col-xs-12 col-md-3">
                </div>

                <div id="container_4_5" class="col-xs-12 col-md-6">
                </div>

                <div id="container_4_6" class="col-xs-12 col-md-6">
                </div>
            </div>
        </div>
    </div>

    <!-- 下栏 -->
    <div class="row_fluid">
        <!-- 下左栏 -->
        <div id="container_5" class="col-xs-12 col-md-4">

            <div id="container_5_1" class="col-xs-12 col-md-12">
            </div>
            <div id="container_5_2" class="col-xs-12 col-md-12">
            </div>
        </div>

        <!-- 下中栏 -->
        <div id="container_6" class="col-xs-12 col-md-4">
        </div>

        <!-- 下右栏 -->
        <div class="col-xs-12 col-md-4">
            <div id="container_7" class="row_fluid">
                <div id="container_7_1" class="col-xs-12 col-md-6">
                </div>
                <div id="container_7_2" class="col-xs-12 col-md-6">
                </div>
                <div id="container_7_3" class="col-xs-12 col-md-12">
                </div>
            </div>
        </div>

    </div>

2、前端JS代码 - Echarts option设置

var idContainer_4_5 = "container_4_5";
function initEchart_4_5() {
  // 基于准备好的dom,初始化echarts实例
  var myChart = echarts.init(document.getElementById(idContainer_4_5), gTheme);
  option = {
    title: {
      text: "年龄分布",
      top: "10%",
      left: "center",
      textStyle: {
        color: "#17c0ff",
        fontSize: "12",
      },
    },

    tooltip: {
      trigger: "item",
      formatter: "{a} <br/>{b}: {c} ({d}%)",
      position: function (p) {
        //其中p为当前鼠标的位置
        return [p[0] + 10, p[1] - 10];
      },
    },

    grid: {
      left: "0",
      right: "10",
      bottom: "25%",
      top: "20%",
      containLabel: true,
    },

    xAxis: {
      type: "category",
      data: [],
      axisLabel: {
        textStyle: {
          color: "rgba(255,255,255,.8)",
          fontSize: 10,
        },
      },
      axisLine: {
        lineStyle: {
          color: "rgba(255,255,255,.2)",
        },
      },
      splitLine: {
        lineStyle: {
          color: "rgba(255,255,255,.1)",
        },
      },
    },
    yAxis: {
      type: "value",
      data: [],
      axisLabel: {
        textStyle: {
          color: "rgba(255,255,255,.8)",
          fontSize: 10,
        },
      },
      axisLine: {
        lineStyle: {
          color: "rgba(255,255,255,.2)",
        },
      },
      splitLine: {
        lineStyle: {
          color: "rgba(255,255,255,.1)",
        },
      },
    },
    series: [
      {
        name: "年龄分布",
        type: "bar",
        stack: "total",
        label: {
          show: true,
        },
      },
    ],
  };

  // 使用刚指定的配置项和数据显示图表。
  myChart.setOption(option);
  window.addEventListener("resize", function () {
    myChart.resize();
  });
}

function getKeys(dataList) {
  var keys = [];
  var len = dataList.length;
  for (var i = 0; i < len; i++) keys.push(dataList[i].name);
  return keys;
}

function asyncData_4_5() {
  $.getJSON("myjson/bar_age.json").done(function (data) {
    var myChart = echarts.init(document.getElementById(idContainer_4_5));
    myChart.setOption({
      xAxis: { data: getKeys(data) },
      series: [{ data: data }],
    });
  }); //end $.getJSON
}

initEchart_4_5();

3、JSON 数据通信格式定义

[{"name": "<18", "value": 2962}, {"name": "18-23", "value": 3119}, {"name": "24-30", "value": 2562}, {"name": "31-40", "value": 1024}, {"name": "41-50", "value": 2791}, {"name": ">50", "value": 4073}]

4、前端数据定时更新控制

function asyncData() {
  asyncData_4_5();
  asyncData_4_6();
  asyncData_5_1();
  asyncData_5_2();
  asyncData_6();
  asyncData_7_1();
  asyncData_7_2();
  asyncData_7_3();
  // 定时从服务器更新数据
  setTimeout(asyncData, 1000);
}

5、后端 flask 服务器


app = Flask(__name__, static_folder="static", template_folder="template")


@app.route('/')
def hello_world():
    return 'Hello World!'

# 主程序在这里
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  欢迎多多交流

 六、源码下载

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

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

 更多精彩案例

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

  • 49
    点赞
  • 342
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 42
    评论
以下是一个简单的基于 EchartsPython 实现的动态实时大屏的源代码示例,仅供参考: Python 代码: ```python from pyecharts.charts import Line import pandas as pd from apscheduler.schedulers.background import BackgroundScheduler from flask import Flask, render_template import atexit app = Flask(__name__) # 读取数据文件 data = pd.read_csv('data.csv') # 定时器,每分钟更新一次数据 scheduler = BackgroundScheduler() scheduler.add_job(func=update_data, trigger='interval', seconds=60) scheduler.start() atexit.register(lambda: scheduler.shutdown()) @app.route('/') def index(): return render_template('index.html') @app.route('/get_data') def get_data(): # 获取最新的数据 latest_data = update_data() # 将数据转化为 Echarts 所需的格式 x_data = latest_data['date'].tolist() y_data = latest_data['value'].tolist() # 返回数据给页面 return {'x_data': x_data, 'y_data': y_data} def update_data(): # 读取最新的数据 latest_data = pd.read_csv('data.csv') # 对数据进行处理和分析 # ... return latest_data if __name__ == '__main__': app.run(debug=True) ``` HTML 代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>动态实时大屏</title> <script src="https://cdn.staticfile.org/echarts/4.8.0/echarts.min.js"></script> <script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script> </head> <body> <div id="chart" style="height: 400px; width: 100%;"></div> <script> var chart = echarts.init(document.getElementById('chart')); var x_data = []; var y_data = []; // 定时器,每秒钟更新一次数据 setInterval(function(){ $.get('/get_data', function(data){ x_data = data['x_data']; y_data = data['y_data']; }); chart.setOption({ xAxis: { data: x_data }, series: [{ data: y_data }] }); }, 1000); </script> </body> </html> ``` 注意:以上代码仅为示例代码,具体实现需要根据实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YYDataV数据可视化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值