首页 > 其他分享 >14-项目实战-图形页面

14-项目实战-图形页面

时间:2023-02-01 11:56:34浏览次数:40  
标签:实战 14 series list chart name option data 页面

# 第三方js插件
    1. highchart 国外 : https://www.hcharts.cn/demo/highcharts/column-basic
    2. echats   国内(推荐): https://echarts.apache.org/handbook/zh/get-started/#

1. 创建路由

from bbc_list.views import login, home_page, order, phone, admin, task, bill, chart
urlpatterns = [
    # 数据统计
    path("chart/list/", chart.chart_list),
    path("chart/line/", chart.chart_line),
    path("chart/bar/", chart.chart_bar),
    path("chart/pie/", chart.chart_pie),
    path("chart/highcharts/", chart.highcharts),
]

2. 创建视图函数(views-chart.py)

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


def chart_list(request):
    """视图统计页面"""
    return render(request, "chart_list.html")


def chart_line(request):
    """折线图"""
    legend = ["数组1", "数组2"]

    series_list = [
        {
            "name": "数组1",
            "type": "line",
            "stack": "Total",
            "data": [5, 20, 36, 10, 10, 20]
        }, {
            "name": "数组2",
            "type": "line",
            "stack": "Total",
            "data": [10, 15, 30, 20, 20, 30]
        }
    ]
    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_bar(request):
    """构建柱状图的数据"""

    legend = ["数据1", "数据2"]

    series_list = [
        {
            "name": '数据1',
            "type": 'bar',
            "data": [5, 20, 36, 10, 10, 20]
        },
        {
            "name": '数据2',
            "type": 'bar',
            "data": [10, 15, 30, 20, 20, 30]
        }
    ]

    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": 1048, "name": '数据1'},
        {"value": 735, "name": '数据2'},
        {"value": 580, "name": '数据3'},
    ]

    result = {
        "status": True,
        "data": db_data_list,
    }
    return JsonResponse(result)


def highcharts(request):
    """highchart视图"""
    return render(request, "highcharts.html")


3. 创建html页面

# chart_list.html
{% extends 'one.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(){
        var myChart =echarts.init(document.getElementById("m1"));

        var option = {
            title:{
                text:"订单统计表",
                left:"center",
            },
            tooltip:{
                trigger:"axis"
            },
            legend:{
                data:[],
                bottom:0
            },
            toolbox: {
                feature: {
                  saveAsImage: {}
                }
              },
              xAxis: {
                type: 'category',
                boundaryGap: false,
                data: []
              },
              yAxis: {
                type: 'value'
              },
              series: []
            };

            $.ajax({
            url:"/chart/line/",
            type:"get",
            dataType:"JSON",
            success:function(res){
                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 initBar(){
        //基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById("m2"));

        //指定图表的数据和配置
        var option = {
        title: {
          text: '配送信息统计',
          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: [],
                  emphasis: {
                    itemStyle: {
                      shadowBlur: 10,
                      shadowOffsetX: 0,
                      shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                  }
                }
              ]
            };

      $.ajax({
        url:"/chart/pie/",
        type:"get",
        dataType:"JSON",
        success:function(res){
            if(res.status){
                option.series[0].data = res.data;

                // 使用刚指定的配置项和数据显示图表。
                myChart.setOption(option);

            }
        }

      })


        }


</script>


{% endblock %}
highcharts.html
{% extends 'one.html' %}


{% block content %}
<div class="container">
    <div id="m1" style="width: 100%;height:400px;"></div>

</div>

{% endblock %}

{% block js %}
<script src="https://code.hcharts.cn/highcharts/highcharts.js"></script>
<script>
     // 图表配置
        var options = {
    chart: {
        type: 'column'
    },
    title: {
        text: '月平均降雨量'
    },
    subtitle: {
        text: '数据来源: WorldClimate.com'
    },
    xAxis: {
        categories: [
            '一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'
        ],
        crosshair: true
    },
    yAxis: {
        min: 0,
        title: {
            text: '降雨量 (mm)'
        }
    },
    tooltip: {
        // head + 每个 point + footer 拼接成完整的 table
        headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
        pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
        '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
        footerFormat: '</table>',
        shared: true,
        useHTML: true
    },
    plotOptions: {
        column: {
            borderWidth: 0
        }
    },
    series: [{
        name: '东京',
        data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }, {
        name: '纽约',
        data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]
    }, {
        name: '伦敦',
        data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]
    }, {
        name: '柏林',
        data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]
    }]};
        // 图表初始化函数
        var chart = Highcharts.chart('m1', options);

</script>

{% endblock %}

标签:实战,14,series,list,chart,name,option,data,页面
From: https://www.cnblogs.com/kh-1314/p/17058140.html

相关文章

  • 13-项目实战-订单管理
    #1.依赖bootstrap.py-ModelForm#2.依赖pagemtion.py-分页1.创建订单管理表classBill(models.Model):"""订单管理"""oid=models.CharField(verbos......
  • 12- 登陆页面
    1.创建url(项目/url.py)fromapp01.viewsimportloginurlpatterns=[#登陆页面path("login/",account.login),path("logout/",account.logout),......
  • 弱网测试利器-Charles工具实战
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试一:弱网测......
  • OKR之剑·实战篇04:OKR执行过程优化的那些关键事
    作者:vivo互联网平台产品研发团队本文是《OKR之剑》系列之实战第4篇——OKR执行过程不是一成不变的,团队和个人在执行中不断优化执行的具体行动,保障OKR的高效执行。......
  • 极客时间 Java并发编程实战 笔记
    思考、再思考、总结、再总结01可见性、原子性和有序性举几个例子先。缓存可能导致可见性问题,因为多核CPU上的多个核可能都持有同一数据的不同缓存。两个线程并行地对......
  • 【计算机网络】Stanford CS144 Lab0 : networking warmup 学习记录
    CS144官方镜像:https://cs144.github.io/kangyupl备份的镜像:https://kangyupl.gitee.io/cs144.github.io/实验准备Ubuntu18.04.6LTSx86_64(实验提供)gcc8......
  • 《RPC实战与核心原理》学习笔记Day14
    19|分布式环境下如何快速定位问题?分布式环境下定位问题有什么难点?分布式环境下定位问题的难点在于,各子应用、子服务之间有复杂的依赖关系,我们有时很难确定是哪个服务......
  • [ABC014D] 閉路 [LCA]
    现有一棵\(N(N\le10^5)\)个节点的树,保证节点编号为\(1\toN\)。首先输入\(N\),然后输入\(N-1\)条边。然后输入一个整数\(q(q\le10^5)\)。接下来给出\(q\)次询......
  • 力扣---1148. 文章浏览 I
    Views表:+---------------+---------+|ColumnName  |Type   |+---------------+---------+|article_id   |int    ||author_id    |int   ......
  • [Python] 爬虫系统与数据处理实战 Part.4 数据库
    表单<form>...</form>创建HTML表单用于向服务器提交数据登录方式form-datax-www-form-urlencodedajax以json方式提交数据登录是为了得到cookie登录成功后Hea......