欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用 Flask 動(dòng)態(tài)展示 Pyecharts 圖表數(shù)據(jù)方法小結(jié)

 更新時(shí)間:2019年09月04日 08:50:27   作者:Python編程與實(shí)戰(zhàn)  
本文將介紹如何在 web 框架 Flask 中使用可視化工具 pyecharts, 看完本教程你將掌握幾種動(dòng)態(tài)展示可視化數(shù)據(jù)的方法。感興趣的朋友跟隨小編一起看看吧

本文將介紹如何在 web 框架 Flask 中使用可視化工具 pyecharts, 看完本教程你將掌握幾種動(dòng)態(tài)展示可視化數(shù)據(jù)的方法,不會(huì)的話你來(lái)找我呀...

Flask 模板渲染

1. 新建一個(gè)項(xiàng)目 flask-echarts

在編輯器中選擇 New Project,然后選擇 Flask,創(chuàng)建完之后,Pycharm 會(huì)幫我們把啟動(dòng)腳本和模板文件夾都建好

2. 拷貝 pyecharts 模板

將鏈接中的以下模板 ├── jupyter_lab.html ├── jupyter_notebook.html ├── macro ├── nteract.html ├── simple_chart.html ├── simple_page.html └── table.html 全部拷貝到 tempaltes 文件夾中 github.com/pyecharts/p…

3.渲染圖表

主要目標(biāo)是將 pyecharts 生成的圖表數(shù)據(jù)在視圖函數(shù)中返回,所以我們直接在 app.py 中修改代碼,如下:

from flask import Flask
from jinja2 import Markup
from pyecharts import options as opts
from pyecharts.charts import Bar
app = Flask(__name__, static_folder="templates")
def bar_base() -> Bar:
  c = (
    Bar()
      .add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
      .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
      .add_yaxis("商家B", [15, 25, 16, 55, 48, 8])
      .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副標(biāo)題"))
  )
  return c
@app.route("/")
def index():
  c = bar_base()
  return Markup(c.render_embed())
if __name__ == "__main__":
  app.run()

直接運(yùn)行,在瀏覽器中輸入地址,直接將數(shù)據(jù)顯示出來(lái)了

 

這是一個(gè)很簡(jiǎn)單的靜態(tài)數(shù)據(jù)展示,別急好戲還在后頭~

Flask 前后端分離

前面講的是一個(gè)靜態(tài)數(shù)據(jù)的展示的方法,用 pyecharts 和 Flask 結(jié)合最主要是實(shí)現(xiàn)一種動(dòng)態(tài)更新數(shù)據(jù),增量更新數(shù)據(jù)等功能!以上面講解的內(nèi)容為基礎(chǔ),在 templates 文件夾中新建一個(gè) index.html 的文件,其中主要用到了 jquery 和 pyecharts 管理的 echarts.min.js 依賴。

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>動(dòng)態(tài)更新數(shù)據(jù)</title>
  <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
</head>
<body>
  <div id="bar" style="width:1000px; height:600px;"></div>
  <script>
   (
    function () {
      var result_json = '{{ result_json|tojson }}';
      // var result = JSON.parse(result_json);
      var chart = echarts.init(document.getElementById('bar'), 'gray', {renderer: 'canvas'});
      $.ajax({
        type: "GET",
        url: "http://127.0.0.1:5000/barChart",
        dataType: 'json',
        data: {result: result_json},
        success: function (result) {
          chart.setOption(result);
        }
      });
    }
  )
  </script>
</body>
</html>

有 html 基礎(chǔ)的朋友應(yīng)該知道該代碼主要是向地址 "127.0.0.1:5000/barChart" 發(fā)送請(qǐng)求,所以在 app.py 中我們也需要做相應(yīng)的修改,添加該地址的路由函數(shù),從而實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)更新。 部分代碼如下:

@app.route("/")
def index():
  data = request.args.to_dict()
  return render_template("index.html", result_json=data)
@app.route("/barChart")
def get_bar_chart():
  args = request.args.to_dict()
  result = eval(args.get("result"))
  name = result.get("name")
  subtitle = result.get("subtitle")
  c = bar_base(name, subtitle)
  return c.dump_options_with_quotes()

在 index 視圖函數(shù)中接收瀏覽器傳過(guò)來(lái)的參數(shù),然后傳遞給 index.html。此處只是簡(jiǎn)單示例,所以未做參數(shù)校驗(yàn)。而另一個(gè)視圖函數(shù)主要是獲取參數(shù),傳給圖表生成函數(shù) bar_base(), 從而實(shí)現(xiàn)根據(jù) url 地址傳過(guò)來(lái)的參數(shù),動(dòng)態(tài)展示圖表數(shù)據(jù)。結(jié)果如下:

 

這里只是簡(jiǎn)單演示, 所以只將圖表標(biāo)題作為動(dòng)態(tài)傳參。此場(chǎng)景適用于第一次請(qǐng)求獲取我們想要的數(shù)據(jù),然后將其展示出來(lái)。比如我之前寫的 NBA 球員數(shù)據(jù)可視化  mp.weixin.qq.com/s/WWCNf46Ch…

就是此方法,不同球員展示對(duì)應(yīng)球員數(shù)據(jù)!

定時(shí)全量更新圖表

該場(chǎng)景主要是前端主動(dòng)向后端進(jìn)行數(shù)據(jù)刷新,定時(shí)刷新的核心在于 HTML 的 setInterval 方法。那么 index.html 代碼就是下面這樣的:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Awesome-pyecharts</title>
  <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
</head>
<body>
  <div id="bar" style="width:1000px; height:600px;"></div>
  <script>
    var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});
    $(
      function () {
        fetchData(chart);
        setInterval(fetchData, 2000);
      }
    );
    function fetchData() {
      $.ajax({
        type: "GET",
        url: "http://127.0.0.1:5000/barChart",
        dataType: 'json',
        success: function (result) {
          chart.setOption(result);
        }
      });
    }
  </script>
</body>
</html>

對(duì)應(yīng)的將 app.py 中 bar_base() 作相應(yīng)的修改,從而實(shí)現(xiàn)定時(shí)全量更新圖表

def bar_base() -> Bar:
  c = (
    Bar()
      .add_xaxis(["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"])
      .add_yaxis("商家A", [random.randint(10, 100) for _ in range(6)])
      .add_yaxis("商家B", [random.randint(10, 100) for _ in range(6)])
      .set_global_opts(title_opts=opts.TitleOpts(title="", subtitle=""))
  )
  return c
@app.route("/")
def index():
  return render_template("index.html")
@app.route("/barChart")
def get_bar_chart():
  c = bar_base()
  return c.dump_options_with_quotes()

運(yùn)行之后,在瀏覽器中打開(kāi),效果如下:

 

看到這動(dòng)圖,有沒(méi)有一種...,如果我是 DJ DJ,琦你太美...

定時(shí)增量更新圖表

同樣的要對(duì) index.html 做修改

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Awesome-pyecharts</title>
  <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script>
</head>
<body>
  <div id="bar" style="width:1000px; height:600px;"></div>
  <script>
    var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});
    var old_data = [];
    $(
      function () {
        fetchData(chart);
        setInterval(getDynamicData, 2000);
      }
    );
    function fetchData() {
      $.ajax({
        type: "GET",
        url: "http://127.0.0.1:5000/lineChart",
        dataType: "json",
        success: function (result) {
          chart.setOption(result);
          old_data = chart.getOption().series[0].data;
        }
      });
    }
    function getDynamicData() {
      $.ajax({
        type: "GET",
        url: "http://127.0.0.1:5000/lineDynamicData",
        dataType: "json",
        success: function (result) {
          old_data.push([result.name, result.value]);
          chart.setOption({
            series: [{data: old_data}]
          });
        }
      });
    }
  </script>
</body>
</html>

增量更新,后端代碼也需要相應(yīng)的修改

from pyecharts.charts import Line
def line_base() -> Line:
  line = (
    Line()
    .add_xaxis(["{}".format(i) for i in range(10)])
    .add_yaxis(
      series_name="",
      y_axis=[randrange(50, 80) for _ in range(10)],
      is_smooth=True,
      label_opts=opts.LabelOpts(is_show=False),
    )
    .set_global_opts(
      title_opts=opts.TitleOpts(title="動(dòng)態(tài)數(shù)據(jù)"),
      xaxis_opts=opts.AxisOpts(type_="value"),
      yaxis_opts=opts.AxisOpts(type_="value"),
    )
  )
  return line
@app.route("/")
def index():
  return render_template("index.html")
@app.route("/lineChart")
def get_line_chart():
  c = line_base()
  return c.dump_options_with_quotes()
idx = 9
@app.route("/lineDynamicData")
def update_line_data():
  global idx
  idx = idx + 1
  return jsonify({"name": idx, "value": randrange(50, 80)})

走起,來(lái)看看效果吧

 

總結(jié)

以上所述是小編給大家介紹的利用 Flask 動(dòng)態(tài)展示 Pyecharts 圖表數(shù)據(jù)方法小結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • python實(shí)現(xiàn)一次創(chuàng)建多級(jí)目錄的方法

    python實(shí)現(xiàn)一次創(chuàng)建多級(jí)目錄的方法

    這篇文章主要介紹了python實(shí)現(xiàn)一次創(chuàng)建多級(jí)目錄的方法,涉及Python中os模塊makedirs方法的使用技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • Python+wxPython實(shí)現(xiàn)文件名批量處理

    Python+wxPython實(shí)現(xiàn)文件名批量處理

    在日常的文件管理中,我們經(jīng)常需要對(duì)文件進(jìn)行批量處理以符合特定的命名規(guī)則或需求,本文主要介紹了如何使用wxPython進(jìn)行文件夾中文件名的批量處理,需要的可以參考下
    2024-04-04
  • python網(wǎng)絡(luò)爬蟲(chóng)精解之XPath的使用說(shuō)明

    python網(wǎng)絡(luò)爬蟲(chóng)精解之XPath的使用說(shuō)明

    XPath 是一門在 XML 文檔中查找信息的語(yǔ)言。XPath 可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。XPath 是 W3C XSLT 標(biāo)準(zhǔn)的主要元素,并且 XQuery 和 XPointer 都構(gòu)建于 XPath 表達(dá)之上
    2021-09-09
  • python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法

    python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法

    今天小編就為大家分享一篇python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python構(gòu)造函數(shù)屬性示例魔法解析

    Python構(gòu)造函數(shù)屬性示例魔法解析

    Python構(gòu)造函數(shù)和屬性魔法是面向?qū)ο缶幊讨械年P(guān)鍵概念,它們?cè)试S在類定義中執(zhí)行特定操作,以控制對(duì)象的初始化和屬性訪問(wèn),本文將深入學(xué)習(xí)Python中的構(gòu)造函數(shù)和屬性魔法,包括構(gòu)造函數(shù)__init__、屬性的@property和@attribute.setter等,以及它們的實(shí)際應(yīng)用
    2023-12-12
  • 解決Spyder中圖片顯示太小的問(wèn)題

    解決Spyder中圖片顯示太小的問(wèn)題

    下面小編就為大家分享一篇解決Spyder中圖片顯示太小的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python刪掉重復(fù)行之drop_duplicates()用法示例

    python刪掉重復(fù)行之drop_duplicates()用法示例

    Pandas的drop_duplicates()方法用于從DataFrame中刪除重復(fù)的行,這篇文章主要給大家介紹了關(guān)于python刪掉重復(fù)行之drop_duplicates()用法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 使用python BeautifulSoup庫(kù)抓取58手機(jī)維修信息

    使用python BeautifulSoup庫(kù)抓取58手機(jī)維修信息

    這篇文章主要介紹了一個(gè)使用python抓取58手機(jī)的精準(zhǔn)商家信息,使用BeautifulSoup API的方法
    2013-11-11
  • Python獲取單個(gè)程序CPU使用情況趨勢(shì)圖

    Python獲取單個(gè)程序CPU使用情況趨勢(shì)圖

    這篇文章主要介紹了Python獲取單個(gè)程序CPU使用情況趨勢(shì)圖,本文使用matplotlib將數(shù)據(jù)可視化,需要的朋友可以參考下
    2015-03-03
  • python超詳細(xì)實(shí)現(xiàn)完整學(xué)生成績(jī)管理系統(tǒng)

    python超詳細(xì)實(shí)現(xiàn)完整學(xué)生成績(jī)管理系統(tǒng)

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)完整版學(xué)生成績(jī)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-03-03

最新評(píng)論