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 相关文章推荐
python类继承与子类实例初始化用法分析
Apr 17 Python
Django学习笔记之ORM基础教程
Mar 27 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
django自带的server 让外网主机访问方法
May 14 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
基于python if 判断选择结构的实例详解
May 06 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
python中if及if-else如何使用
Jun 02 Python
python按照list中字典的某key去重的示例代码
Oct 13 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
第八节 访问方式 [8]
2006/10/09 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
python实现查询苹果手机维修进度
2015/03/16 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
应聘面试自我评价
2014/01/24 职场文书
创业计划书如何编写
2014/02/06 职场文书
财务会计自荐信范文
2014/02/21 职场文书
个人工作表现评语
2014/04/30 职场文书
大专生自荐书范文
2014/06/22 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
2015年社区工作总结
2015/04/08 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis