首页 > 其他分享 >数据统计

数据统计

时间:2023-11-06 12:12:59浏览次数:25  
标签:option series 数据 list chart res data 统计

图表

一般需要用到两种插件

  • highchart:国外的
  • echarts:国内的,百度开源的

修改myproject/app01/templates/layout.html

添加数据统计菜单

<li><a href="/chart/list/">数据统计</a></li>

新建myproject/app01/views/chart.py

修改myproject/myproject/urls.py 

添加路由

 #数据统计
    path('chart/list/', chart.chart_list),

修改myproject/app01/views/chart.py

from django.shortcuts import render

def chart_list(request):
    """数据统计页面"""
    return render(request, 'chart_list.html')

新建myproject/app01/templates/chart_list.html

获取echarts

获取方式: https://registry.npmjs.org/echarts/-/echarts-5.4.1.tgz
下载完成后

 将此文件放到项目静态文件目录下

 修改myproject/app01/templates/chart_list.html

引入Apache ECharts

{% extends 'layout.html' %}
{% load static %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">折线图</div>
            <div class="panel-body">
                图图图
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">柱状图</div>
                    <div class="panel-body">
                        图图图
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">饼图</div>
                    <div class="panel-body">
                        图图图
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/echarts.js' %}"></script>
{% endblock %}

  

绘制一个简单的柱状图

1.在绘图前我们需要为 ECharts 准备一个定义了高宽的 DOM 容器。

2.然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图。

 修改myproject/app01/templates/chart_list.html

{% extends 'layout.html' %}
{% load static %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">折线图</div>
            <div class="panel-body">
                图图图
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">柱状图</div>
                    <div class="panel-body">
                        <div id="m2" style="width: 600px;height: 400px;"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">饼图</div>
                    <div class="panel-body">
                        图图图
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/echarts.js' %}"></script>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('m2'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
            },
            yAxis: {},
            series: [
                {
                    name: '销量',
                    type: 'bar',
                    data: [5, 20, 36, 10, 10, 20]
                }
            ]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
{% endblock %}

 

 

 稍微修改一下柱状图

修改myproject/app01/templates/chart_list.html

 

 修改myproject/app01/templates/chart_list.html

将图例放在底部

            legend: {
                data: ['销量','业绩'],
                bottom: 0
            },

  

 

  修改myproject/app01/templates/chart_list.html

将图的标题居中

    title: {
                text: 'ECharts 入门示例',
                textAlign: 'auto',
                left: 'center'
            },

 

 现在表是写定的,怎么通过Ajax从后台获取数据然后展示呢

修改myproject/app01/templates/chart_list.html

 

{% extends 'layout.html' %}
{% load static %}

{% block content %}
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">折线图</div>
<div class="panel-body">
图图图
</div>
</div>
<div class="row">
<div class="col-sm-8">
<div class="panel panel-default">
<div class="panel-heading">柱状图</div>
<div class="panel-body">
<div id="m2" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">饼图</div>
<div class="panel-body">
<div id="m3" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

{% block js %}
<script src="{% static 'js/echarts.js' %}"></script>
<script type="text/javascript">

$(function () {
initBar();
})

/**
*初始化柱状图
*/
function initBar() {


// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('m2'));
// 指定图表的配置项和数据
var option = {
title: {
text: 'ECharts 入门示例',
{#subtext: '小标题',#}
textAlign: 'auto',
left: 'center'
},
tooltip: {},
legend: {
data: [], //后台获取
bottom: 0
},
xAxis: {
data: [] //后台获取
},
yAxis: {},
series: [] //后台获取
};

$.ajax({
url: "/chart/bar/",
type: "get",
dataType: "JSON",
success: function (res) {
//将后台返回的数据,更新到option中
if (res.status) {
option.legend.data = res.data.legend;
option.xAxis.data = res.data.x_axis;
option.series = res.data.series_list;
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
}
})
}


</script>
{% endblock %}

修改myproject/myproject/urls.py 

添加路由

path('chart/bar/', chart.chart_bar),

修改myproject/app01/views/chart.py 

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

def chart_list(request):
    """数据统计页面"""
    return render(request, 'chart_list.html')


def chart_bar(request):
    """构造柱状图的数据"""
    #数据可以去数据库中获取
    legend = ["11","77"]
    series_list = [
        {
            "name": '11',
            "type": 'bar',
            "data": [5, 20, 36, 10, 10, 20]
        },
        {
            "name": '77',
            "type": 'bar',
            "data": [53, 12, 13, 10, 20, 27]
        }
    ]
    x_axis = ['1月', '2月', '3月', '4月', '5月', '6月']

    result = {
        "status":True,
        "data":{
            'legend':legend,
            'series_list': series_list,
            'x_axis':x_axis
        }
    }
    return JsonResponse(result)

 

 

 

 饼状图

修改myproject/app01/templates/chart_list.html

{% extends 'layout.html' %}
{% load static %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">折线图</div>
            <div class="panel-body">
                图图图
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">柱状图</div>
                    <div class="panel-body">
                        <div id="m2" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">饼图</div>
                    <div class="panel-body">
                        <div id="m3" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/echarts.js' %}"></script>
    <script type="text/javascript">

        $(function () {
            initBar();
            iniPie();
        })

        /**
         *初始化柱状图
         */
        function initBar() {


            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m2'));
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts 入门示例',
                    {#subtext: '小标题',#}
                    textAlign: 'auto',
                    left: 'center'
                },
                tooltip: {},
                legend: {
                    data: [], //后台获取
                    bottom: 0
                },
                xAxis: {
                    data: [] //后台获取
                },
                yAxis: {},
                series: [] //后台获取
            };

            $.ajax({
                url: "/chart/bar/",
                type: "get",
                dataType: "JSON",
                success: function (res) {
                    //将后台返回的数据,更新到option中
                    if (res.status) {
                        option.legend.data = res.data.legend;
                        option.xAxis.data = res.data.x_axis;
                        option.series = res.data.series_list;
                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                }
            })
        }

        /**
         *初始化饼状图
         */
        function iniPie() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m3'));
            option = {
                title: {
                    text: 'Referer of a Website',
                    subtext: 'Fake Data',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    bottom: 0
                },
                series: [
                    {
                        name: 'Access From',
                        type: 'pie',
                        radius: '50%',
                        data: [
                            {value: 1048, name: 'Search Engine'},
                            {value: 735, name: 'Direct'},
                            {value: 580, name: 'Email'},
                            {value: 484, name: 'Union Ads'},
                            {value: 300, name: 'Video Ads'}
                        ],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);

        }
    </script>
{% endblock %}

  

  

 

 

同样通过Ajax从后台获取数据然后用饼图展示

修改myproject/app01/templates/chart_list.html

{% extends 'layout.html' %}
{% load static %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">折线图</div>
            <div class="panel-body">
                图图图
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">柱状图</div>
                    <div class="panel-body">
                        <div id="m2" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">饼图</div>
                    <div class="panel-body">
                        <div id="m3" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/echarts.js' %}"></script>
    <script type="text/javascript">

        $(function () {
            initBar();
            iniPie();
        })

        /**
         *初始化柱状图
         */
        function initBar() {


            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m2'));
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts 入门示例',
                    {#subtext: '小标题',#}
                    textAlign: 'auto',
                    left: 'center'
                },
                tooltip: {},
                legend: {
                    data: [], //后台获取
                    bottom: 0
                },
                xAxis: {
                    data: [] //后台获取
                },
                yAxis: {},
                series: [] //后台获取
            };

            $.ajax({
                url: "/chart/bar/",
                type: "get",
                dataType: "JSON",
                success: function (res) {
                    //将后台返回的数据,更新到option中
                    if (res.status) {
                        option.legend.data = res.data.legend;
                        option.xAxis.data = res.data.x_axis;
                        option.series = res.data.series_list;
                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                }
            })
        }

        /**
         *初始化饼状图
         */
        function iniPie() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m3'));
            var option = {
                title: {
                    text: '部门预算占比',
                    subtext: '分公司',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    bottom: 0
                },
                series: [
                    {
                        name: '预算',
                        type: 'pie',
                        radius: '50%',
                        data: [
                            {value: 1048, name: 'IT部门'},
                            {value: 735, name: '运营'},
                            {value: 580, name: '新媒体'},
                        ],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            $.ajax({
                url: "/chart/pie/",
                type: "get",
                dataType: "JSON",
                success: function (res) {
                    //将后台返回的数据,更新到option中
                    if (res.status) {
                        option.series[0].data = res.data;
                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                }
            })

        }
    </script>
{% endblock %}

修改myproject/myproject/urls.py 

添加路由

path('chart/pie/', chart.chart_pie),

修改myproject/app01/views/chart.py 

 

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

def chart_list(request):
    """数据统计页面"""
    return render(request, 'chart_list.html')


def chart_bar(request):
    """构造柱状图的数据"""
    #数据可以去数据库中获取
    legend = ["11","77"]
    series_list = [
        {
            "name": '11',
            "type": 'bar',
            "data": [5, 20, 36, 10, 10, 20]
        },
        {
            "name": '77',
            "type": 'bar',
            "data": [53, 12, 13, 10, 20, 27]
        }
    ]
    x_axis = ['1月', '2月', '3月', '4月', '5月', '6月']

    result = {
        "status":True,
        "data":{
            'legend':legend,
            'series_list': series_list,
            'x_axis':x_axis
        }
    }
    return JsonResponse(result)

def chart_pie(request):
    """构造饼图的数据"""

    db_data_list = [
        {"value": 2048, "name": 'IT部门'},
        {"value": 735, "name": '运营'},
        {"value": 580, "name": '新媒体'},
    ]
    result = {
        "status": True,
        "data": db_data_list
    }
    return JsonResponse(result)

  

 折线图

修改myproject/app01/templates/chart_list.html

{% extends 'layout.html' %}
{% load static %}

{% block content %}
    <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">折线图</div>
            <div class="panel-body">
                <div id="m1" style="width: 100%;height: 300px;"></div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-8">
                <div class="panel panel-default">
                    <div class="panel-heading">柱状图</div>
                    <div class="panel-body">
                        <div id="m2" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-4">
                <div class="panel panel-default">
                    <div class="panel-heading">饼图</div>
                    <div class="panel-body">
                        <div id="m3" style="width: 100%;height: 400px;"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/echarts.js' %}"></script>
    <script type="text/javascript">

        $(function () {
            initLine();
            initBar();
            initPie();
        })

        /**
         *初始化折线图
         */
        function initLine() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m1'));
            // 指定图表的配置项和数据
            var option = {
                xAxis: {
                    type: 'category',
                    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                },
                yAxis: {
                    type: 'value'
                },
                series: [
                    {
                        data: [150, 230, 224, 218, 135, 147, 260],
                        type: 'line'
                    }
                ]
            };
            // 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);
        }

        /**
         *初始化柱状图
         */
        function initBar() {


            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m2'));
            // 指定图表的配置项和数据
            var option = {
                title: {
                    text: 'ECharts 入门示例',
                    {#subtext: '小标题',#}
                    textAlign: 'auto',
                    left: 'center'
                },
                tooltip: {},
                legend: {
                    data: [], //后台获取
                    bottom: 0
                },
                xAxis: {
                    data: [] //后台获取
                },
                yAxis: {},
                series: [] //后台获取
            };

            $.ajax({
                url: "/chart/bar/",
                type: "get",
                dataType: "JSON",
                success: function (res) {
                    //将后台返回的数据,更新到option中
                    if (res.status) {
                        option.legend.data = res.data.legend;
                        option.xAxis.data = res.data.x_axis;
                        option.series = res.data.series_list;
                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                }
            })
        }

        /**
         *初始化饼状图
         */
        function initPie() {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('m3'));
            var option = {
                title: {
                    text: '部门预算占比',
                    subtext: '分公司',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    bottom: 0
                },
                series: [
                    {
                        name: '预算',
                        type: 'pie',
                        radius: '50%',
                        data: [
                            {value: 1048, name: 'IT部门'},
                            {value: 735, name: '运营'},
                            {value: 580, name: '新媒体'},
                        ],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            $.ajax({
                url: "/chart/pie/",
                type: "get",
                dataType: "JSON",
                success: function (res) {
                    //将后台返回的数据,更新到option中
                    if (res.status) {
                        option.series[0].data = res.data;
                        // 使用刚指定的配置项和数据显示图表。
                        myChart.setOption(option);
                    }
                }
            })

        }
    </script>
{% endblock %}

  

 

 

 

  

 

标签:option,series,数据,list,chart,res,data,统计
From: https://www.cnblogs.com/kekeeleven/p/17812361.html

相关文章

  • 基础数据类型详解——
    1.字符集和编码字符集(CharacterSet)是一种定义了一组字符、符号和控制符号的集合,这些字符通常用于书写和表示文本信息。字符集可以包括字母、数字、标点符号、特殊符号、控制字符等。电脑如何进行存储文字信息01 <=>1010101010<=>二进制转化成十进制<=>88电脑如何进行......
  • sql数据库文件的迁移mdf操作方法
    http://www.pcxitongcheng.com/shujuku/MsSql/2022-11-11/32457.htmlmdf文件很特殊能接触到他的小伙伴很少,但也还是有不少会遇到关于mdf的问题,今天就给你们带来了数据库mdf文件转换为sql文件的详细方法,一起看看吧。sql数据库文件的迁移mdf:1、打开sqlserver控制台。2、选中要......
  • 解锁多核处理器的力量:探索数据并行化在 Java 8 Stream 中的应用
    在Java8中引入的Stream为集合数据的处理带来了现代化的方式,而数据并行化则进一步提升了处理速度,充分发挥了多核处理器的优势。本篇博客将详细介绍数据并行化在Java8Stream中的应用,以及如何利用并行流处理大量数据。什么是数据并行化数据并行化是指将任务分解成多个子任务,......
  • Flink 数据集成服务在小红书的降本增效实践
    摘要:本文整理自实时引擎研发工程师袁奎,在FlinkForwardAsia2022数据集成专场的分享。本篇内容主要分为四个部分:小红书实时服务降本增效背景Flink与在离线混部实践实践过程中遇到的问题及解决方案未来展望一、小红书实时服务降本增效背景1.1小红书Flink使用场景特点小红书的......
  • Apache Paimon 实时数据湖 Streaming Lakehouse 的存储底座
    摘要:本文整理自阿里云开源大数据表存储团队负责人,阿里巴巴高级技术专家李劲松(之信),在StreamingLakehouseMeetup的分享。内容主要分为四个部分:流计算邂逅数据湖PaimonCDC实时入湖Paimon不止CDC入湖总结与生态一、流计算邂逅数据湖流计算1.0实时预处理流计算1.0架构截止......
  • 企业文件夹同步,飞驰云联让数据管理更高效
    随着企业数据量的不断增加,如何高效地进行文件夹同步已成为企业提升工作效率、确保数据安全的重要一环。飞驰云联的同步软件作为一款专门针对企业级用户的数据同步解决方案,在实践中表现出色,值得信赖。飞驰云联的同步软件是一款高效、稳定、易用的企业级文件夹同步工具。它支持多......
  • Eolink Apikit 版本更新:数据字典功能上线、支持 MongoDB 数据库操作...
    ......
  • 数据结构的基本概念和术语
    数据(Data)数据:能输入计算机且能被计算机处理的各种符号的集合,信息的载体能被计算机识别,存储和加工包括:数值型的数据:整数,实数等  非数值型的数据:文字,图像,声音等;2.数据元素和数据项数据元素:是数据的基本单位,在计算机程序......
  • Oracle高级技巧:使用PIVOT函数和窗口函数解决只查询一条数据的问题
    写本博客的目为了温故而知新把学习过程记录下来,以备后查。当我们需要将表格中的行转置为列时,通常可以使用PIVOT函数来实现。但是在某些情况下,由于创建日期等字段相同,只有一条数据会被查询出来。这时候,我们就可以使用窗口函数进行分组和排序,以便返回具有相同创建日期的所有记录。......
  • 数据集:机器人理解世界的关键
    原创|文BFT机器人传统的机器人和工业自动化解决方案已经颇有成效。在工厂中入驻自动化机器人可以快速地帮助工人们完成长时间重复劳动的任务。随着用工成本上涨、技能人才短缺、工作环境恶劣等问题的凸显,社会更迫切地需要采用自动化设备代替人工来完成该类操作,在保证产品质量的......