中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用 Flask 動態展示 Pyecharts 圖表數據方法小結

發布時間:2020-08-19 13:03:36 來源:腳本之家 閱讀:437 作者:Python編程與實戰 欄目:開發技術

本文將介紹如何在 web 框架 Flask 中使用可視化工具 pyecharts, 看完本教程你將掌握幾種動態展示可視化數據的方法,不會的話你來找我呀...

Flask 模板渲染

1. 新建一個項目 flask-echarts

在編輯器中選擇 New Project,然后選擇 Flask,創建完之后,Pycharm 會幫我們把啟動腳本和模板文件夾都建好

利用 Flask 動態展示 Pyecharts 圖表數據方法小結

利用 Flask 動態展示 Pyecharts 圖表數據方法小結

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.渲染圖表

主要目標是將 pyecharts 生成的圖表數據在視圖函數中返回,所以我們直接在 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="我是副標題"))
  )
  return c
@app.route("/")
def index():
  c = bar_base()
  return Markup(c.render_embed())
if __name__ == "__main__":
  app.run()

直接運行,在瀏覽器中輸入地址,直接將數據顯示出來了

利用 Flask 動態展示 Pyecharts 圖表數據方法小結 

這是一個很簡單的靜態數據展示,別急好戲還在后頭~

Flask 前后端分離

前面講的是一個靜態數據的展示的方法,用 pyecharts 和 Flask 結合最主要是實現一種動態更新數據,增量更新數據等功能!以上面講解的內容為基礎,在 templates 文件夾中新建一個 index.html 的文件,其中主要用到了 jquery 和 pyecharts 管理的 echarts.min.js 依賴。

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>動態更新數據</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" ></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 基礎的朋友應該知道該代碼主要是向地址 "127.0.0.1:5000/barChart" 發送請求,所以在 app.py 中我們也需要做相應的修改,添加該地址的路由函數,從而實現動態數據更新。 部分代碼如下:

@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 視圖函數中接收瀏覽器傳過來的參數,然后傳遞給 index.html。此處只是簡單示例,所以未做參數校驗。而另一個視圖函數主要是獲取參數,傳給圖表生成函數 bar_base(), 從而實現根據 url 地址傳過來的參數,動態展示圖表數據。結果如下:

利用 Flask 動態展示 Pyecharts 圖表數據方法小結 

這里只是簡單演示, 所以只將圖表標題作為動態傳參。此場景適用于第一次請求獲取我們想要的數據,然后將其展示出來。比如我之前寫的 NBA 球員數據可視化  mp.weixin.qq.com/s/WWCNf46Ch…

就是此方法,不同球員展示對應球員數據!

定時全量更新圖表

該場景主要是前端主動向后端進行數據刷新,定時刷新的核心在于 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" ></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>

對應的將 app.py 中 bar_base() 作相應的修改,從而實現定時全量更新圖表

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()

運行之后,在瀏覽器中打開,效果如下:

利用 Flask 動態展示 Pyecharts 圖表數據方法小結 

看到這動圖,有沒有一種...,如果我是 DJ DJ,琦你太美...

定時增量更新圖表

同樣的要對 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" ></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>

增量更新,后端代碼也需要相應的修改

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="動態數據"),
      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)})

走起,來看看效果吧

利用 Flask 動態展示 Pyecharts 圖表數據方法小結 

總結

以上所述是小編給大家介紹的利用 Flask 動態展示 Pyecharts 圖表數據方法小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲沃县| 江北区| 广西| 德保县| 厦门市| 汉寿县| 武山县| 景谷| 女性| 昆明市| 罗江县| 蒙城县| 盘锦市| 米林县| 冕宁县| 舟山市| 松原市| 丽江市| 泰顺县| 西乡县| 仙居县| 崇信县| 肥东县| 迭部县| 房产| 林西县| 洛宁县| 贺州市| 定边县| 武功县| 张掖市| 五峰| 荔波县| 潮州市| 韶山市| 海阳市| 中牟县| 如东县| 肥乡县| 拉萨市| 漯河市|