chart.js Line chart with different background colors for each section

后端 未结 4 1005
天涯浪人
天涯浪人 2020-12-09 22:41

Lets say I have a Line chart with mon-fri for 4 weeks. I want that these 4 weeks are diveded in sections. I want the first monday to friday have a white background color. Th

4条回答
  •  [愿得一人]
    2020-12-09 23:47

    Chart.js clears the canvas before drawing (or redrawing) a chart.

    We can jump in on this and draw our background once the chart is cleared. Just extend the Line chart and override the clear function in the initialize override.


    Preview


    Script

    Chart.types.Line.extend({
        name: "LineAlt",
        initialize: function(data){
            Chart.types.Line.prototype.initialize.apply(this, arguments);
    
            // keep a reference to the original clear
            this.originalClear = this.clear;
            this.clear = function () {
    
                this.originalClear();
    
                // 1 x scale unit
                var unitX = this.datasets[0].points[1].x - this.datasets[0].points[0].x;
    
                var yTop = this.scale.startPoint;
                var yHeight = this.scale.endPoint - this.scale.startPoint;
    
                // change your color here
                this.chart.ctx.fillStyle = 'rgba(100,100,100,0.8)';
    
                // we shift it by half a x scale unit to the left because the space between gridline is actually a shared space
                this.chart.ctx.fillRect(this.datasets[0].points[5].x - 0.5 * unitX, yTop, unitX * 5, yHeight);
                this.chart.ctx.fillRect(this.datasets[0].points[15].x - 0.5 * unitX, yTop, unitX * 5, yHeight);
            }
        }
    });
    

    Then just use LineAlt instead of Line

    var myNewChart = new Chart(ctx).LineAlt(data);
    

    Fiddle - http://jsfiddle.net/oe2606ww/

提交回复
热议问题