Django展示可视化图表的多种方式


Posted in Python onApril 08, 2021

1. 前言

大家好,我是安果!

使用 Django 进行 Web 开发时,经常有需要展示图表的需求,以此来丰富网页的数据展示

常见方案包含:Highcharts、Matplotlib、Echarts、Pyecharts,其中后 2 种方案使用频率更高

本篇文章将聊聊 Django 结合 Echarts、Pyecharts 实现图表可视化的具体流程

2. Echarts

Echarts 是百度开源的一个非常优秀的可视化框架,它可以展示非常复杂的图表类型

以展示简单的柱状图为例,讲讲 Django 集成 Echarts 的流程

首先,在某个 App 的 views.py 编写视图函数

当请求方法为 POST 时,定义柱状图中的数据值,然后使用 JsonResponse 返回数据

from django.http import JsonResponse
from django.shortcuts import render


def index_view(request):
    if request.method == "POST":

        # 柱状图的数据
        datas = [5, 20, 36, 10, 10, 20]

        # 返回数据
        return JsonResponse({'bar_datas': datas})
    else:
        return render(request, 'index.html', )

在模板文件中,导入 Echarts 的依赖

PS:可以使用本地 JS 文件或 CDN 加速服务

{#导入js和echarts依赖#}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.2/echarts.common.js"></script>

然后,重写 window.onload 函数,发送一个 Ajax 请求给后端,利用 Echarts 将返回结果展示到图表中去

​<script>
    // 柱状图
    function show_bar(data) {

        //控件
        var bar_widget = echarts.init(document.getElementById('bar_div'));

        //设置option
        option = {
            title: {
                text: '简单的柱状图'
            },
            tooltip: {},
            legend: {
                data: ['销量']
            },
            xAxis: {
                type: 'category',
                data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
            },
            yAxis: {
                type: 'value'
            },
            series: [{
                data: data,
                type: 'bar'
            }]
        };

        bar_widget.setOption(option)
    }
    //显示即加载调用
    window.onload = function () {
        //发送post请求,地址为index(Jquery)
        $.ajax({
            url: "/",
            type: "POST",
            data: {},
            success: function (data) {
                // 柱状图
                show_bar(data['bar_datas']);

                //后端返回的结果
                console.log(data)
            }
        })
    }
</script>

最后,编写路由 URL,运行项目

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

urlpatterns = [
    path('',include('index.urls')),
​    path('admin/', admin.site.urls),
]

发现,首页展示了一个简单的柱状图

Django展示可视化图表的多种方式

更多复杂的图表展示可以参考官方

https://echarts.apache.org/examples/zh/index.html

3. Pyecharts

Pyecharts 是一款使用 Python 对 Echarts 进行再次封装后的开源框架

相比 Echarts,Django 集成 Pyecharts 更快捷、方便

Django 集成 Pyecharts 只需要 4 步

3-1  安装依赖

# 安装依赖
pip(3) install pyecharts

3-2  拷贝 pyecharts 的模板文件到项目下

将虚拟环境中 pyecharts 的模板文件拷贝到项目的模板文件夹下

比如本机路径如下:

/Users/xingag/Envs/xh_log/lib/python3.7/site-packages/pyecharts/render/templates/

Django展示可视化图表的多种方式

3-3  编写视图函数,渲染图表

在视图文件中,使用 pyecharts 库内置的类 Bar 创建一个柱状图

# Create your views here.
from django.http import HttpResponse
from jinja2 import Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig

CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./index/templates"))

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


# http://127.0.0.1:8000/demo/
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())

3-4  运行项目

运行项目,生成的柱状图如下:

Django展示可视化图表的多种方式

这只是最简单的使用实例,更多复杂的图表及前后端分离、更新的例子

可以参考官网:

https://pyecharts.org/#/zh-cn/web_django?id=django-前后端分离

4. 最后

文中介绍了 Django 快速集成 Echarts 和 Pyecharts 的基本步骤

实际项目中,一些复杂的图表、前后端分离数据更新可以参考官网去拓展

源码:https://github.com/xingag/python_web

以上就是Django展示可视化图表的多种方式的详细内容,更多关于Django 可视化图表的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
python使用pil生成图片验证码的方法
May 08 Python
python的socket编程入门
Jan 29 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
python对文件目录的操作方法实例总结
Jun 24 Python
解决python文件双击运行秒退的问题
Jun 24 Python
详解Python3定时器任务代码
Sep 23 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
python图片灰度化处理的几种方法
Jun 23 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
python tkinter模块的简单使用
python如何在word中存储本地图片
python 下载文件的几种方式分享
Apr 07 #Python
完美处理python与anaconda环境变量的冲突问题
python 如何用map()函数创建多线程任务
python requests模块的使用示例
Apr 07 #Python
Python 使用dict实现switch的操作
Apr 07 #Python
You might like
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
页面中js执行顺序
2009/11/09 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
Python线程的两种编程方式
2015/04/14 Python
python对数组进行反转的方法
2015/05/20 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
怎样在程序里获得一个空指针
2015/01/24 面试题
实习生的自我评价
2014/01/08 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
中华魂演讲稿
2014/05/13 职场文书
城管个人总结
2015/02/28 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python
python面向对象版学生信息管理系统
2021/06/24 Python
python3操作redis实现List列表实例
2021/08/04 Python