html5柱状图示例

<!DOCTYPE html>
<html lang="en">
<canvas id="canvas1" width="1000" height="300"></canvas>
<script>
    (function () {
        window.addEventListener("load", func1(),func2(), false);
    })();
    
    function func1() {
        var data = [21.2, 22.3, 23.1, 9.4, 20.0, 19.8, 19.9];
        var lateral = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"];

        //获取上下文
        var canvas = document.getElementById("canvas1");
        var context = canvas.getContext("2d");

        //绘制背景
        var gradient = context.createLinearGradient(0, 0, 0, 300);
        context.fillStyle = gradient;
        context.fillRect(0, 0, canvas.width, canvas.height);
        var real_height = canvas.height-15;
        var real_width = canvas.width-40;

        //描绘边框
        var grid_cols = data.length+1;
        var cell_width = real_width/grid_cols;
        context.lineWidth = 1;
        context.strokeStyle = "#a0a0a0";

        // 结束边框描绘
        context.beginPath();

        //画横线
        context.moveTo(0,real_height); //起点
        context.lineTo(real_width,real_height); //终点
        context.lineWidth = 2;
        context.strokeStyle = "black";
        context.stroke();

        //画竖线
        context.moveTo(0,20); //起点
        context.lineTo(0,real_height); //终点
        context.lineWidth = 2;
        context.strokeStyle = "black";
        context.stroke();

        //找出最大值
        var max_v =0;
        for(var i = 0; i<data.length; i++){
            if (data[i] > max_v) {
                max_v =data[i]
            };
        }
        max_v = max_v * 1.1;

        // 将数据换算为坐标
        var points = [];
        for( var i=0; i < data.length; i++){
            var v= data[i];
            var px = cell_width * (i +1);
            var py = real_height - real_height*(v / max_v);
            points.push({"x":px,"y":py});
        }

        //绘制坐标图形
        for(var i in points){
            var p = points[i];
            context.beginPath();
            if(data[i]<10){ //低于10为黄色
                context.fillStyle="#FFD306";
            }else{
                context.fillStyle="blue";
            }
            context.fillRect(p.x,p.y,15,real_height-p.y);
            context.fill();
        }

        //添加文字
        for(var i in points)
        {
            context.fillStyle="black";
            var p = points[i];
            context.fillText(data[i], p.x, p.y - 5);
            context.fillText(lateral[i],p.x + 1,real_height+12);
        }
        context.fillText('星期',real_width,real_height+12);
        context.fillText('气温',0,10);
    }
    
    function func2() {
        var canvas = document.getElementById("canvas1");
        var context = canvas.getContext("2d");
        context.fillText('html5柱状图示例',500,10);
    }
</script>
</html>

在这里插入图片描述


参考:https://www.cnblogs.com/shuniuniu/p/5318666.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禺垣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值