Flask使用Pyecharts在单个页面展示多个图表的方法

下面是详细讲解"Flask使用Pyecharts在单个页面展示多个图表的方法"的完整攻略,包含两条示例说明:

概述

Pyecharts提供了一种简单的方式展示图表,它基于Echarts,提供类似Python的API。使用Pyecharts生成单个图表很容易,但如果需要在一个页面上展示多个图表时,可能就需要一些额外的处理。本攻略将介绍使用Flask和Pyecharts在单个页面上展示多个图表的方法。

准备工作:

  • Python3.x
  • Flask
  • Pyecharts

示例1:在一个页面上展示多个图表

我们将使用Flask和Pyecharts库在一个页面上展示多个图表。为了简化示例,我们将展示两个图表,一个是柱状图,一个是折线图。

首先,安装Flask和Pyecharts库:

pip install flask
pip install pyecharts

然后,创建一个名为'app.py'的文件,添加以下代码:

from flask import Flask, render_template
from pyecharts import options as opts
from pyecharts.charts import Bar, Line

app = Flask(__name__)

@app.route("/")
def index():
    bar = (
        Bar()
        .add_xaxis(["A", "B", "C", "D", "E"])
        .add_yaxis("bar", [5, 20, 36, 10, 75])
        .set_global_opts(title_opts=opts.TitleOpts(title="Bar Chart"))
    )

    line = (
        Line()
        .add_xaxis(["A", "B", "C", "D", "E"])
        .add_yaxis("line", [15, 30, 20, 45, 70])
        .set_global_opts(title_opts=opts.TitleOpts(title="Line Chart"))
    )

    return render_template("index.html", bar=bar.render_embed(), line=line.render_embed())

if __name__ == "__main__":
    app.run()

这段代码将创建两个图表:一个柱状图和一个折线图。然后,通过render_embed()方法将这两个图表渲染为HTML片段,最后通过render_template()方法将这两个HTML片段渲染到index.html文件。

接下来,创建一个名为'index.html'的文件,添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Multiple Charts</title>
</head>
<body>
    {{bar|safe}}
    {{line|safe}}
</body>
</html>

这段代码将在网页上显示两个图表。

运行一下这个Flask应用程序,然后打开"http://127.0.0.1:5000/"即可在一个页面上看到两个图表。

示例2:对多个图表进行交互操作

这个示例将展示如何对多个图表进行交互操作。我们将展示两个图表,当鼠标移到某个点上时,另一个图表将同时更新显示相关数据。

和上一个例子一样,我们需要先安装Flask和Pyecharts库。

然后,创建一个名为'app.py'的文件,添加以下代码:

from flask import Flask, render_template
from pyecharts import options as opts
from pyecharts.charts import Scatter

app = Flask(__name__, static_folder="templates")

@app.route("/")
def index():
    data = [
        [10.0, 8.04, 10.0, 9.14, 'I'],
        [8.0, 6.95, 8.0, 8.14, 'II'], 
        [13.0, 7.58, 13.0, 8.74, 'III'],
        [9.0, 8.81, 9.0, 8.77, 'IV'], 
        [11.0, 8.33, 11.0, 9.26, 'V'], 
        [14.0, 9.96, 14.0, 8.10, 'VI'], 
        [6.0, 7.24, 6.0, 6.13, 'VII'], 
        [4.0, 4.26, 4.0, 3.10, 'VIII'], 
        [12.0, 10.84, 12.0, 9.13, 'IX'], 
        [7.0, 4.82, 7.0, 7.26, 'X'], 
        [5.0, 5.68, 5.0, 4.74, 'XI']
    ]

    hover_js = """function (params) {
        $.post("/position", {x:params.data[0], y:params.data[1]}, function(data) {
            $('#line').html(data);
        });
    }"""

    scatter = (
        Scatter()
        .add_xaxis([x[0] for x in data])
        .add_yaxis("Data", [x[1] for x in data], label_opts=opts.LabelOpts(formatter='{b}'))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Scatter Chart"),
            toolbox_opts=opts.ToolboxOpts(),
            tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross', formatter='{c}'),
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(formatter='{b}'),
            itemstyle_opts=opts.ItemStyleOpts(),
            tooltip_opts=opts.TooltipOpts(formatter="({c})")
        )
        .set_colors(['#DA70D6'])
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}'),
                         itemstyle_opts=opts.ItemStyleOpts(),
                         tooltip_opts=opts.TooltipOpts(formatter="({c})"))
        .set_global_opts(title_opts=opts.TitleOpts(title="Scatter Chart"))
    )

    line = (
        Scatter()
        .add_xaxis([x[2] for x in data])
        .add_yaxis("Data", [x[3] for x in data])
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Line Chart"),
            toolbox_opts=opts.ToolboxOpts(),
            tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross')
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(formatter='{b}'),
            itemstyle_opts=opts.ItemStyleOpts(),
            tooltip_opts=opts.TooltipOpts(formatter="({c})")
        )
        .set_colors(['#7FFF00'])
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}'),
                         itemstyle_opts=opts.ItemStyleOpts(),
                         tooltip_opts=opts.TooltipOpts(formatter="({c})"))
        .set_global_opts(title_opts=opts.TitleOpts(title="Scatter Chart"))
    )

    scatter.on("mouseover", hover_js)

    return render_template("index.html", scatter=scatter.render_embed(), line=line.render_embed())

@app.route("/position", methods=["POST"])
def position():
    x = float(request.form.get("x"))
    y = float(request.form.get("y"))
    data = [
        [10, y * 0.5 + 3, 10, 9.14], 
        [8, y * 0.5 + 3, 8, 8.14], 
        [13, y * 0.5 + 3, 13, 8.74], 
        [9, y * 0.5 + 3, 9, 8.77], 
        [11, y * 0.5 + 3, 11, 9.26], 
        [14, y * 0.5 + 3, 14, 8.10], 
        [6, y * 0.5 + 3, 6, 6.13], 
        [4, y * 0.5 + 3, 4, 3.10], 
        [12, y * 0.5 + 3, 12, 9.13], 
        [7, y * 0.5 + 3, 7, 7.26], 
        [5, y * 0.5 + 3, 5, 4.74]
    ]

    line = (
        Scatter()
        .add_xaxis([x[2] for x in data])
        .add_yaxis("Data", [x[3] for x in data])
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Line Chart"),
            toolbox_opts=opts.ToolboxOpts(),
            tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross')
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(formatter='{b}'),
            itemstyle_opts=opts.ItemStyleOpts(),
            tooltip_opts=opts.TooltipOpts(formatter="({c})")
        )
        .set_colors(['#7FFF00'])
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}'),
                         itemstyle_opts=opts.ItemStyleOpts(),
                         tooltip_opts=opts.TooltipOpts(formatter="({c})"))
        .set_global_opts(title_opts=opts.TitleOpts(title="Scatter Chart"))
    )

    return line.render_embed()

if __name__ == "__main__":
    app.run()

这里我们用Pyecharts的Scatter()组件创建了两个图表,一个散点图和一个折线图。用到的数据是经典的端点数据集。

在这个示例中,我们加入了一个hover_js方法,这个方法会在数据点上鼠标移动时调用。它将数据点作为参数传递给"position"路由。在"position"路由中,我们使用传递的数据点创建一个新的折线图,并将它使用render_embed()方法渲染为HTML片段。然后,我们将HTML片段作为响应返回到JavaScript代码中,以便在网页上显示更新后的折线图。

最后,创建一个名为'index.html'的文件,添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Interactive Charts</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <div id="scatter" style="width:800px;height:400px;"></div>
    <div id="line" style="width:800px;height:400px;"></div>
    {{scatter|safe}}
    {{line|safe}}
</body>
</html>

这里,我们创建了两个div容器,分别用于显示散点图和折线图,然后将渲染的HTML片段插入到div容器中。

运行一下这个Flask应用程序,然后打开"http://127.0.0.1:5000/",鼠标移到散点图上的某个点上,折线图将会随之更新,实现了两个图表的交互。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask使用Pyecharts在单个页面展示多个图表的方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 全面了解Nginx, WSGI, Flask之间的关系

    全面了解Nginx、WSGI和Flask之间的关系包括以下几个方面: 一、Nginx是什么? Nginx是一款高性能的Web服务器和反向代理服务器,由Igor Sysoev创造,并于2004年首次发布,官方网站:https://nginx.org/. Nginx可以作为一个HTTP服务器,也可以在前面设置HTTP服务器的反向代理服务器,它可以作为Apache…

    Flask 2023年5月16日
    00
  • Python 工具类实现大文件断点续传功能详解

    Python 工具类实现大文件断点续传功能详解 简介 在文件上传或下载过程中,如果遇到大文件,如果发生传输失败,需要重新传输的情况会非常不方便,甚至无法实现。为了解决这种问题,我们可以实现大文件断点续传功能,使文件上传或下载可以随时中断和恢复。 实现流程 大文件断点续传的实现流程如下: 设置支持 range 的Range头,支持服务器返回指定范围的数据。 获…

    Flask 2023年5月16日
    00
  • Flask框架的学习指南之用户登录管理

    标题:Flask框架的学习指南之用户登录管理 1.概述 Flask是一个非常流行的Python Web框架,灵活可扩展。在Web应用程序中,用户登录管理是必不可少的一项功能。Flask框架提供了快速构建用户认证和授权的工具。 2.安装Flask 在开始使用Flask之前,需要先安装Flask。可以使用pip来安装Flask: pip install Flas…

    Flask 2023年5月15日
    00
  • Flask框架学习笔记(一)安装篇(windows安装与centos安装)

    下面我来详细讲解一下“Flask框架学习笔记(一)安装篇(Windows安装与CentOS安装)”这篇文章的完整攻略。 安装篇 1. Windows安装 1.1 安装Python环境 首先,我们需要在Windows系统中安装Python环境。进入Python官网(https://www.python.org/downloads/windows/),选择最新版…

    Flask 2023年5月15日
    00
  • Python SqlAlchemy动态添加数据表字段实例解析

    下面我将详细讲解“Python SqlAlchemy动态添加数据表字段实例解析”的完整攻略,包含两条示例说明。 1. SqlAlchemy动态添加数据表字段的实现 SqlAlchemy是Python的一个ORM(Object Relational Mapping)框架,用于操作关系型数据库。在SqlAlchemy中实现动态添加数据表字段的方法如下: (1)定…

    Flask 2023年5月16日
    00
  • flask框架路由常用定义方式总结

    让我为你详细讲解一下“flask框架路由常用定义方式总结”的完整攻略。 什么是flask框架? Flask是一个基于 Python 语言的轻量级 Web 开发框架,使用 Werkzeug 作为 Web 服务器网关接口,使用 Jinja2 模板引擎,这两个库也都是 Flask 标配。它设计精简,易于扩展,使它成为很多 Web 开发者喜欢使用的框架之一。 什么是…

    Flask 2023年5月15日
    00
  • js中值引用和地址引用实例分析

    JS中的值引用和地址引用指的是,在JS中,非基本类型数据(如对象、数组等)的赋值方式存在两种:值传递和引用传递。当使用值传递时,实际上是将变量的值(即数据内容)直接复制给接收变量;而当使用引用传递时,则是将变量的地址(指针)复制给接收变量,两者指向同一块内存空间,从而共享同一份数据。这里通过两个实例来详细讲解这两种传递方式的异同点。 实例1:值传递 假设有两…

    Flask 2023年5月16日
    00
  • Flask框架之数据交互的实现

    Flask是一款轻巧灵活的Python Web框架,通过Flask框架搭建后端服务可以快速地进行前后端的数据交互。本文将详细讲解Flask框架中数据交互的实现完整攻略,包括使用Flask框架通过GET和POST方式实现前后端数据传递的两个具体示例。 一、GET方式实现数据交互 GET方式是HTTP请求中最常见的一种方式,我们一般通过在URL中进行上传数据来实…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部