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中使用logging模块打印log日志详解
Apr 05 Python
Python制作数据导入导出工具
Jul 31 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Django模板语言 Tags使用详解
Sep 09 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
python re模块常见用法例举
Mar 01 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
商务英语毕业生自荐信范文
2013/11/08 职场文书
临床护士自荐信
2014/01/31 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
Java 多线程协作作业之信号同步
2022/05/11 Java/Android