Django template 和 Chart.js 结合画图及两种随机颜色方法

本文介绍了如何使用Django模板与Chart.js结合,实现数据可视化。通过引入Chart.js库,创建2d图表上下文,展示了基于JavaScript和jQuery的两种绘图方法,并详细解释了如何设置Chart对象。此外,还分享了两种JavaScript生成随机颜色的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 介绍

Chart.js基于HTML5 canvas技术,支持所有现代浏览器,并且针对IE7/8提供了降级替代方案;Chart.js不依赖任何外部工具库,轻量级(压缩之后仅有4.5k),并且提供了加载外部参数的方法;Chart.js帮你用不同的方式让你的数据变得可视化。每种类型的图表都有动画效果,并且看上去非常棒,即便是在retina屏幕上。

2.快速上手

起步
引入Chart.js文件

首先我们需要在页面中引入Chart.js文件。此工具库在全局命名空间中定义了Chart变量。

创建图表

为了创建图表,我们要实例化一个Chart对象。为了完成前面的步骤,首先需要需要传入一个绘制图表的2d context。以下是案例。

<canvas id="myChart" width="400" height="400"></canvas>
//Get the context of the canvas element we want to select
var ctx = document.getElementById("myChart").getContext("2d");
var myNewChart = new Chart(ctx).PolarArea(data);

我们还可以用jQuery获取canvas的context。首先从jQuery集合中获取我们需要的DOM节点,然后在这个DOM节点上调用 getContext(“2d”) 方法。

//Get context with jQuery - using jQuery's .get() method.
var ctx = $("#myChart").get(0).getContext("2d");
//This will get the first returned node in the jQuery collection.
var myNewChart = new Chart(ctx);

当我们完成了在指定的canvas上实例化Chart对象之后,Chart.js会自动针对retina屏幕做缩放。
Chart对象设置完成后,我们就可以继续创建Chart.js中提供的具体类型的图表了。下面这个案例中,我将展示如何与Django template 结合画图。

2.1 基于Javascript 的方法
<script type="text/javascript">
    var cage_list = new Array;
    var mask_data = new Array;
    var unmask_data = new Array;
    {% for cage in cage_list %}
        cage_list.push('{{ cage.cagename }}');
        mask_data.push('{{ each_cage_mask_dcit|get_item:cage}}');
        unmask_data.push('{{ each_cage_unmask_dcit|get_item:cage}}');
    {% endfor %}

    var barChartData = {
    labels :cage_list,
    datasets : [
        {
            fillColor : "rgba(220,220,220,0.5)",
            strokeColor : "rgba(220,220,220,0.8)",
            highlightFill: "rgba(220,220,220,0.75)",
            highlightStroke: "rgba(220,220,220,1)",
            data : mask_data
        },
        {
            fillColor : "rgba(151,187,205,0.5)",
            strokeColor : "rgba(151,187,205,0.8)",
            highlightFill : "rgba(151,187,205,0.75)",
            highlightStroke : "rgba(151,187,205,1)",
            data : unmask_data
        }
    ]
}
window.onload = function(){
    var ctx = document.getElementById("myChart").getContext("2d");
    window.myBar = new Chart(ctx).Bar(barChartData, 
        {responsive : true,
        scaleShowLabels : true,});
}

其中 get_item是一个django template custom tag 如下:
from django.template.defaulttags import register
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)
2.2 基于jQuery画图
{% for cage in cage_list %}
                cage_list.push('{{ cage.cagename }}');
                mask_data.push('{{ each_cage_mask_dcit|get_item:cage}}');
                unmask_data.push('{{ each_cage_unmask_dcit|get_item:cage}}');
         {% endfor %}

        var data = {
                    labels : cage_list,
                    datasets : [
                        {
                            fillColor : "rgba(220,220,220,0.5)",
                            strokeColor : "rgba(220,220,220,1)",
                            data : mask_data
                        },
                        {
                            fillColor : "rgba(151,187,205,0.5)",
                            strokeColor : "rgba(151,187,205,1)",
                            data : unmask_data
                        }
                    ]
                }
        $(document).ready(function(){
            var ctx = $("#myChart").get(0).getContext("2d");
            new Chart(ctx).Bar(data,{
                responsive : true
            });
        })

3 两种随机颜色javascript方法

'rgba(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) +', 0.4'+ ')',
'#'+Math.random().toString(16).substr(-6),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值