第7章 Echarts与pyecharts数据可视化

7.1 Echarts 下载与使用

  • ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,并能够兼容当前绝大部分浏览器。在功能上,ECharts可以提供直观、交互丰富,可高度个性化定制的数据可视化图表。

    • 普通用户想要使用ECharts必须要进入官网中下载其开源的版本,然后才能绘制各种图形。

    • 输入网址:https://echarts.apache.org/zh/download.html,进入ECharts的下载界面中

    • 下载到本地的ECharts文件是个名为echarts.min的Script 文件,在编写网页文档时将该文件放入HTML页面中即可制作各种ECharts开源图表,文档结构如图所示。

一、Echarts 使用基础

1.HTML5基础知识

ECharts是基于HTML页面的可视化图表,HTML5页面的代码实现如下。

2.Canvas基础知识
  • Canvas(画布)是HTML5中的一大特色,它是一种全新的HTML元素
  • Canvas(画布)元素最早是由Apple在Safari中引入,随后HTML为了支持客户端的绘图行为也引入了该元素。
  • 目前Canvas已经成为了HTML标准中的一个重要的标签,各大浏览器厂商也都支持该标签的使用。
  • 使用Canvas元素可以在HTML5网页中绘制各种形状,处理图像信息,制作动画等。值得注意的是Canvas元素只是在网页中创建了图像容器,必须要使用Javascript语言来书写脚本以绘制对应的图形。

在HTML5中创建画布的语法如下:

<canvas id="MyCanvas" width="100" height="100"></canvas>

在HTML5中使用<Canvas>元素来绘制画布,为了能让Javascript引用该元素,一般需要设置canvas 的id。

在Canvas中还包含两个基本属性:width和height,用来设置画布的宽度和高度,例如在这里设置了画布的宽和高都是100像素。

Echarts使用实例

  • 使用ECharts制作图表步骤如下:

    – 新建HTML页面,一般为HTML5页面。

    – 在HTML页面头部中导入js文件。

    – 在HTML页面正文中用JavaScript代码实现图表显示。

(1)引入ECharts:

<head>
  <meta charset="utf-8">
  <title>ECharts</title>
  <script src="echarts.min.js"></script>
</head>

(2)准备容器:

<body>
   <div id="main" style="width: 800px;height:800px;"></div>
</body>

(3)初始化实例:

<body>
   <div id="main" style="width: 800px;height:800px;"></div>
   <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
   </script>
</body>

(4)指定图表的配置项和数据

(5)显示图表

myChart.setOption(option);
  • 值得注意的是:在显示图表的时候,可以使用语句myChart.setOption(option)来实现;也可以这样书写:

  • myChart.setOption()

    或者

二、Echarts可视化实例

【例7-2】制作ECharts图表,代码如下:

  • ECharts图表中常见的配置项参数如表7-1所示, ECharts常见图表名称及含义如表7-2所示。
参数名称 参数含义
option 图表的配置项和数据内容
backgroundColor 全图默认背景
color 数值系列的颜色列表
animation 是否开启动画,默认开启
title 定义图表标题,其中还可包含text主标题和subtext子标题
tooltip 提示框,鼠标悬浮交互时的信息提示
legend 图例,每个图表最多仅有一个图例
toolbox 工具箱,每个图表最多仅有一个工具箱
dataView 数据视图
dataRange 值域
dataZoom 区域缩放控制器,仅对直角坐标系图表有效
timeline 时间轴
grid 网格
categoryAxis 类目轴
series 设置图表显示效果
roamController 缩放漫游组件,仅对地图有效
xAxis 直角坐标中的横坐标
yAxis 直角坐标中的纵坐标
polar 极坐标
symbolList 默认标志图形类型列表
calculable 可计算特性
参数名称 参数含义
bar 条形图/柱状图
Scatter 散点图
Funnel 漏斗图
Gauge 仪表盘
line 折线图/面积图
pie 饼图
map 地图
overlap 组合图
line3D 3D图
liquid 水滴球图
parallel 平行坐标图
graph 关系图
geo 地理坐标系
boxplot 箱形图
effectScatter 带有涟漪特效动画的散点图
radar 雷达图
chord 和弦图
force 力导布局图
tree 树图
evnetRiver 事件河流图
heatmap 热力图
candlestick K线图
wordCloud 词云

7.2 Echarts可视化实例

1.绘制饼图
  • 饼图主要是通过扇形的弧度表现不同类目的数据在总和中的占比,它的数据格式比柱状图更简单,只有一维的数值,也不需要定义横坐标和纵坐标。在ECharts中显示饼图类型的代码如下:

    type: 'pie',
    

    【例7-3】制作ECharts饼图,代码如下

2.绘制散点图
  • 散点图在回归分析中使用较多,它将序列显示为一组点。在散点图的每个点的位置可代表相应的一组数据值,因此通过观察散点图上数据点的分布情况,可以推断出变量间的相关性。

  • 在ECharts中显示散点图类型的代码如下:

    type: 'scatter’
    

    【例7-4】制作ECharts散点图,代码如下:

    3.绘制折线图
    • 折线图是一种较为简单的图形,通常用于显示随时间变化而变化的连续数据。在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。

    • 在ECharts中显折线图类型的代码如下:

      type: ' line'
      

    【例7-5】制作ECharts折线图,代码如下:

7.3 pyecharts可视化应用

1.pyecharts数据可视化介绍

  • pyecharts是一个用于生成 Echarts 图表的类库,是一款将Python与ECharts相结合的强大的数据可视化工具,使用pyecharts可以让开发者轻松的实现大数据的可视化。

2.pyecharts安装与使用

  • 在使用pyecharts之前,首先要安装它。在Windows命令行中使用以下命令来执行安装过程:

    pip install pyecharts
    
  • 执行后,可输入以下命令查看:

    pip list
    
  • 如用户需要用到地图图表,可自行安装对应的地图文件包。命令如下:

    pip install echarts-countries-pypkg #安装全球国家地图
    pip install echarts-china-provinces-pypkg #安装中国省级地图
    pip install echarts-china-cities-pypkg #安装中国市级地图
    
  • 在安装完地图库以后,即可进行地图的数据可视化显示。

3.pyecharts可视化绘图

  • 使用 pyecharts绘制图表的基本语法如下:

    from pyecharts import chart_name
    add() 
    render() 
    from pyecharts import chart_name #引入pyecharts库并定义图表的类型。
    add() #添加图表的各项数据。
    render() #将图表生成为可视化的html网页。
    
1) 绘制条形图/柱状图

在pyecharts中绘制条形图/柱状图是通过条形/柱状的高度和条形的宽度来表现数据的大小。

【例7-7】用pyecharts库绘制柱状图,代码如下

from pyecharts.charts import Bar
from pyecharts.charts import Pie,Gauge
from pyecharts import options as opts
from pyecharts.charts import Radar
from pyecharts.charts import WordCloud,Line,Scatter,Liquid
import random

# 绘制柱状图
def drawBar():
    c = (
        Bar()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("Countries",[31530214,16263695,14122795,5325495,4744961])
        .set_global_opts(title_opts=opts.TitleOpts(title="新冠确诊病例",pos_left="middle"),legend_opts=opts.LegendOpts(pos_top="5%",pos_right="10%"),toolbox_opts=opts.ToolboxOpts(orient="horizontal",pos_left="10%",pos_top="8%"))
    )
    c.render("bar.html")

【例7-8】用pyecharts库绘制不堆叠的柱状图,代码如下:

# 绘制不堆叠柱状图
def drawBar():
    c = (
        Bar()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("九月份",[31530214,16263695,14122795,5325495,4744961])
        .add_yaxis("一月份",[11530214,6263695,4122795,325495,744961])
        .set_global_opts(title_opts=opts.TitleOpts(title="新冠确诊病例",pos_left="middle"),legend_opts=opts.LegendOpts(pos_top="5%",pos_right="10%"),toolbox_opts=opts.ToolboxOpts(orient="horizontal",pos_left="10%",pos_top="8%"))
    )
    c.render("bar2.html")

2)绘制仪表盘
  • 在pyecharts中绘制的仪表盘图形是模仿汽车速度表的一种图表,常用来反映预算完成率、收入增长率等比率性指标。它简单、直观,人人会看,通过刻度来精确的展示数据。

    【例7-9】用pyecharts库绘制仪表盘图,代码如下。

    def drawGauge():
        c =(
            Gauge()
            .add("",[("USA",33)],title_label_opts=opts.GaugeTitleOpts(offset_center=[0,"40%"],font_size="20",color="red"),detail_label_opts=opts.GaugeDetailOpts(color="blue",formatter="{value}%",font_size=20))
            .set_global_opts(title_opts=opts.TitleOpts(title="仪表盘",pos_left="middle"))
        )
        c.render("gauge.html")
    

3)绘制3D图

在pyecharts中可以使用Line3D参数生成3D图。

【例7-10】用pyecharts库绘制3D图,代码如下。

def drawLine3d():
    c=(
        Line3D(init_opts=opts.InitOpts(width="1000px",height="1000px", page_title="3D折线图"))
        .add("3D折线图",[[1.2,3,5,8],[4,5,6,9],[1,2,3,4]])
        .set_global_opts(title_opts= opts.TitleOpts(title="3D 折线图",pos_left ="middle"),legend_opts=opts.LegendOpts(pos_left="right",pos_top="upper"))
    )
    c.render("line3d.html")

4)绘制雷达图
  • 在pyecharts中绘制的雷达图一般用来进行多指标体系比较分析。从雷达图中可以看出指标的实际值与参照值的偏离程度,从而为分析者提供有益的信息。在实际应用中雷达图一般用于成绩展示、效果对比量化、多维数据对比等。在pyecharts中可使用参数Radar来绘制折线图。

    【例7-11】用pyecharts库绘制雷达图,代码如下

    def drawRadar():  
        c = (
            Radar()
            .add_schema(
                # 各项的max_值可以不同
                schema=[
                    opts.RadarIndicatorItem(name='高等数学', max_=100),
                    opts.RadarIndicatorItem(name='大学英语', max_=100),
                    opts.RadarIndicatorItem(name='大学物理', max_=100),
                    opts.RadarIndicatorItem(name='毛概', max_=100),
                    opts.RadarIndicatorItem(name='马经', max_=100),
                    opts.RadarIndicatorItem(name='概率论', max_=100),
                ]
            )
            .add('张三', [[random.randint(10, 100) for _ in range(6)]],           
                 color='red',           
                 areastyle_opts = opts.AreaStyleOpts(  #设置填充的属性
                     opacity = 0.5,                  
                     color='red'                     
             ),)
            .add('李四', [[random.randint(10, 100) for _ in range(6)]],
                 color='green',
                 areastyle_opts = opts.AreaStyleOpts(
                     opacity = 0.5,#透明度
                     color='green'
             ),)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=True))
            .set_global_opts(title_opts=opts.TitleOpts(title='雷达图示例-学生成绩',pos_left="middle"),legend_opts=opts.LegendOpts(pos_top="10%",pos_left="left"))
        )
    
        c.render("radar.html")
    

5)绘制折线图/面积图

(1)在pyecharts中使用参数Line来绘制折线图。

【例7-12】用pyecharts库绘制折线图,代码如下。

def drawLine():
    c=(
        Line()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("Countries",[31530214,16263695,14122795,5325495,4744961])
    )
    c.render("line.html")

使用者可以根据实际情况自行在折线图中添加内容。

如要在【例7-9】中再添加其他数据,可加入以下代码:

def drawLine2():
    c=(
        Line()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("感染人数",[31530214,16263695,14122795,5325495,4744961],symbol="triangle",is_smooth=True)
        .add_yaxis("死亡人数",[530214,363695,142795,124095,74961],symbol="circle",is_smooth=True)
    )
    c.render("line2.html")

  • 在pyecharts中使用参数Line来绘制面积图。
    • 在pyecharts中使用参数Line除了可以绘制折线图外,还可以设置set_series_opts加入参数 AreaStyleOpts来填充该区域的面积。

【例7-13】用pyecharts库绘制折线图,代码如下。

# 面积图
def drawLine3():
    c=(
        Line(init_opts=opts.InitOpts(page_title="折线图"))
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("感染人数",[31530214,16263695,14122795,5325495,4744961],symbol="triangle",is_smooth=True)
        .add_yaxis("死亡人数",[530214,363695,142795,124095,74961],symbol="circle",is_smooth=True)
        .set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=.5)) 
    )
    c.render("line3.html")

6)绘制散点图
  • 在pyecharts中可使用参数Scatter来绘制散点图。

【例7-14】用pyecharts库绘制散点图,代码如下。

def drawScatter():
    c=(
        Scatter()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("Countries",[31530214,16263695,14122795,5325495,4744961])
    )
    c.render("scatter.html")

  • 在pyecharts中还可以绘制带有涟漪效果动态散点图,用参数EffectScatter来实现。

【例7-15】用pyecharts库绘制动态散点图,代码如下。

def drawEffectScatter():
    c=(
        EffectScatter()
        .add_xaxis(["USA","India","Brazil","France","Russia"])
        .add_yaxis("Countries",[31530214,16263695,14122795,5325495,4744961],symbol="triangle")
        .add_yaxis("Countries",[31823014,17263695,15522795,5915495,4945061],symbol="circle")
    )
    c.render("escatter.html")
def drawLiquid():

7)绘制饼图
  • 在pyecharts中使用参数Pie来绘制饼图。

【例7-16】使用pyecharts绘制饼图,代码如下

# 绘制饼图
def drawPie():
    c = (
    Pie()
    .add("Countries",[("USA",31530214),("India",16263695),("Brazil",14122795),("France",5325495),("Russia",4744961)])
    .set_global_opts(title_opts=opts.TitleOpts(title="新冠疫情确诊病例",pos_left="middle"),legend_opts=opts.LegendOpts(pos_right="5%",pos_top="8%"))
    )
    c.render("pie.html")

8)绘制词云
  • 在pyecharts中可直接导入WordCloud库来绘制词云,只需输入要显示的单词以及单词的个数即可。

【例7-17】用pyecharts库绘制词云,代码如下。

def drawWordCloud():
    c=(
        WordCloud()
        .add("",[("USA",31530214),("India",16263695),("Brazil",14122795),("France",5325495),("Russia",4744961)])
    )
    c.render("wordcloud.html")

7.4 pyecharts与django集成

一、Django 模板渲染

1、新建一个 Django 项目
$ django-admin startproject pyecharts_django_demo
2、创建一个应用程序
$ python manage.py startapp test1

pyecharts_django_demo/settings.py 中注册应用程序

# pyecharts_django_demo/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test1'  # <---
]

编辑 demo/urls.py 文件

# test1/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.index, name='index'),
]

pyecharts_django_demo/urls.py 中新增 'test1.urls'

pyecharts_django_demo/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'test1/', include('test1.urls'))  # <---
]
3、拷贝 pyecharts 模板

先在 demo 文件夹下新建 templates 文件夹

__init__.py  __pycache__  admin.py  apps.py  migrations  models.py  templates  tests.py  urls.py  views.py

将 pyecharts 模板,位于 pyecharts.render.templates 拷贝至刚新建的 templates 文件夹

├── jupyter_lab.html
├── jupyter_notebook.html
├── macro
├── nteract.html
├── simple_chart.html
├── simple_page.html
└── table.html
4、 渲染图表

将下列代码保存到 demo/views.py 中。

from jinja2 import Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig
from django.http import HttpResponse
CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./demo/templates"))
from pyecharts import options as opts
from pyecharts.charts import Bar

def index(request):
    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 HttpResponse(c.render_embed())
5、 运行项目
$ python manage.py runserver

使用浏览器打开 http://127.0.0.1:8000/demo 即可访问服务

二、Django 前后端分离

1、新建一个 Django 项目
$ django-admin startproject pyecharts_django_demo

创建一个应用程序

$ python manage.py startapp test2

pyecharts_django_demo/settings.py 中注册应用程序

# pyecharts_django_demo/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test2',  # <--- app 名称
    'rest_framework',
]

pyecharts_django_demo/urls.py 中新增 'test2.urls'

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^demo/', include('test2.urls'))
]

编辑 demo/urls.py 文件(没有就新建一个)

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^bar/$', views.ChartView.as_view(), name='demo'),
    url(r'^index/$', views.IndexView.as_view(), name='demo'),
]
2、 编写画图 HTML 代码

先在根目录文件夹下新建 templates 文件夹,新建一个 index.html

__pycache__   db.sqlite3   demo   manage.py  pyecharts_django_demo  templates

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);
            }
        );

        function fetchData() {
            $.ajax({
                type: "GET",
                url: "http://127.0.0.1:8000/test2/bar",
                dataType: 'json',
                success: function (result) {
                    chart.setOption(result.data);
                }
            });
        }
    </script>
</body>
</html>
3、编写 Django 和 pyecharts 代码渲染图表

注: 目前由于 json 数据类型的问题,无法将 pyecharts 中的 JSCode 类型的数据转换成 json 数据格式返回到前端页面中使用。因此在使用前后端分离的情况下尽量避免使用 JSCode 进行画图。

将下列代码保存到 demo/views.py

import json
from random import randrange

from django.http import HttpResponse
from rest_framework.views import APIView

from pyecharts.charts import Bar
from pyecharts import options as opts


# Create your views here.
def response_as_json(data):
    json_str = json.dumps(data)
    response = HttpResponse(
        json_str,
        content_type="application/json",
    )
    response["Access-Control-Allow-Origin"] = "*"
    return response


def json_response(data, code=200):
    data = {
        "code": code,
        "msg": "success",
        "data": data,
    }
    return response_as_json(data)


def json_error(error_string="error", code=500, **kwargs):
    data = {
        "code": code,
        "msg": error_string,
        "data": {}
    }
    data.update(kwargs)
    return response_as_json(data)


JsonResponse = json_response
JsonError = json_error


def bar_base() -> Bar:
    c = (
        Bar()
        .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
        .add_yaxis("商家A", [randrange(0, 100) for _ in range(6)])
        .add_yaxis("商家B", [randrange(0, 100) for _ in range(6)])
        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
        .dump_options_with_quotes()
    )
    return c


class ChartView(APIView):
    def get(self, request, *args, **kwargs):
        return JsonResponse(json.loads(bar_base()))


class IndexView(APIView):
    def get(self, request, *args, **kwargs):
        return HttpResponse(content=open("./templates/index.html").read())
4、运行项目
$ python manage.py runserver

使用浏览器打开 http://127.0.0.1:8000/test2/index 即可访问服务

三、定时全量更新图表

1、前端主动向后端进行数据刷新

定时刷新的核心在于 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:1600px; height:800px;"></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:8000/test2/bar",
                dataType: 'json',
                success: function (result) {
                    chart.setOption(result.data);
                }
            });
        }
    </script>
</body>
</html>

四、定时增量更新图表

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:1600px; height:800px;"></div>
    <script>
        var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'});
        var old_data = [];
        $(
            function () {
                fetchData(chart);
                setInterval(fetchData, 2000);
            }
        );

        function fetchData() {
            $.ajax({
                type: "GET",
                url: "http://127.0.0.1:8000/demo/line",
                dataType: "json",
                success: function (result) {
                    var options = result.data;
                    chart.setOption(options);
                    old_data = chart.getOption().series[0].data;
                }
            });
        }

        function getDynamicData() {
            $.ajax({
                type: "GET",
                url: "http://127.0.0.1:8000/demo/lineUpdate",
                dataType: 'json',
                success: function (result) {
                    var options = result.data;
                    old_data.push([options.name, options.value]);
                    chart.setOption({
                        series: [{
                            data: old_data
                        }]
                    });
                }
            });
        }

    </script>
</body>
</html>

后端代码也需要相应做出改变

编辑 demo/urls.py 文件(没有就新建一个)

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^line/$', views.ChartView.as_view(), name='demo'),
    url(r'^lineUpdate/$', views.ChartUpdateView.as_view(), name='demo'),
    url(r'^index/$', views.IndexView.as_view(), name='demo'),
]
import json
from random import randrange

from django.http import HttpResponse
from rest_framework.views import APIView

from pyecharts.charts import Line
from pyecharts import options as opts

# Create your views here.
def response_as_json(data):
    json_str = json.dumps(data)
    response = HttpResponse(
        json_str,
        content_type="application/json",
    )
    response["Access-Control-Allow-Origin"] = "*"
    return response


def json_response(data, code=200):
    data = {
        "code": code,
        "msg": "success",
        "data": data,
    }
    return response_as_json(data)


def json_error(error_string="error", code=500, **kwargs):
    data = {
        "code": code,
        "msg": error_string,
        "data": {}
    }
    data.update(kwargs)
    return response_as_json(data)


JsonResponse = json_response
JsonError = json_error


def line_base() -> Line:
    line = (
        Line()
        .add_xaxis(list(range(10)))
        .add_yaxis(series_name="", y_axis=[randrange(0, 100) for _ in range(10)])
        .set_global_opts(
            title_opts=opts.TitleOpts(title="动态数据"),
            xaxis_opts=opts.AxisOpts(type_="value"),
            yaxis_opts=opts.AxisOpts(type_="value")
        )
        .dump_options_with_quotes()
    )
    return line


class ChartView(APIView):
    def get(self, request, *args, **kwargs):
        return JsonResponse(json.loads(line_base()))


cnt = 9


class ChartUpdateView(APIView):
    def get(self, request, *args, **kwargs):
        global cnt
        cnt = cnt + 1
        return JsonResponse({"name": cnt, "value": randrange(0, 100)})

class IndexView(APIView):
    def get(self, request, *args, **kwargs):
        return HttpResponse(content=open("./templates/index.html").read())

7.5 本章小结

(1)ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,并能够兼容当前绝大部分浏览器。在功能上,ECharts可以提供直观,交互丰富,可高度个性化定制的数据可视化图表。

(2)pyecharts 是一个用于生成 Echarts 图表的类库,是一款将Python与ECharts相结合的强大的数据可视化工具,使用pyecharts可以让开发者轻松的实现大数据的可视化。

Copyright © ZHOUWEN all right reserved,powered by GitbookLatest update: 2021-05-30 14:21:04

results matching ""

    No results matching ""