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使用xlrd模块操作Excel数据导入的方法
May 26 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
Python基于codecs模块实现文件读写案例解析
May 11 Python
Python中zip函数如何使用
Jun 04 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
python 算法题——快乐数的多种解法
May 27 Python
Pandas搭配lambda组合使用详解
Jan 22 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+dbfile开发小型留言本
2006/10/09 PHP
杏林同学录(三)
2006/10/09 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
python3实现字符串操作的实例代码
2019/04/16 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
python做接口测试的必要性
2019/11/20 Python
在python3中实现更新界面
2020/02/21 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
食堂员工工作职责
2013/12/18 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
学校隐患排查制度
2015/08/05 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python