Chart.js - Color specific parts of the background in a line chart

前端 未结 1 763
梦毁少年i
梦毁少年i 2021-01-24 21:10

I have a line chart much like this one: http://www.chartjs.org/samples/latest/charts/line/basic.html

I would like to color the areas -100 < y < -40 an

1条回答
  •  清酒与你
    2021-01-24 21:25

    You can use annotation plugin and in particular Box annotations.

    Here below there is an example with Scatter chart:

    var randomScalingFactor = function() {
      return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100);
    };
    var randomColor = function(opacity) {
      return 'rgba(' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + Math.round(Math.random() * 255) + ',' + (opacity || '.3') + ')';
    };
    var data = {
      datasets: [{
        label: "My First dataset",
        data: [{
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }]
      }, {
        label: "My Second dataset",
        data: [{
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }, {
          x: randomScalingFactor(),
          y: randomScalingFactor(),
        }]
      }]
    };
    data.datasets.forEach(function(dataset) {
      dataset.borderColor = randomColor(0.4);
      dataset.backgroundColor = randomColor(0.1);
      dataset.pointBorderColor = randomColor(0.7);
      dataset.pointBackgroundColor = randomColor(0.5);
      dataset.pointBorderWidth = 1;
    });
    
    var ctx = document.getElementById("canvas").getContext("2d");
    window.myScatter = new Chart(ctx, {
    	type: 'scatter',
      data: data,
      options: {
        scales: {
          xAxes: [{
            position: 'bottom',
            gridLines: {
              zeroLineColor: "rgba(0,255,0,1)"
            },
            scaleLabel: {
              display: true,
              labelString: 'x axis'
            },
          }],
          yAxes: [{
            position: 'left',
            gridLines: {
              zeroLineColor: "rgba(0,255,0,1)"
            },
            scaleLabel: {
              display: true,
              labelString: 'y axis'
            },
            ticks: {
            	min: -100,
              max: 100
            }
          }]
        },
        annotation: {
          drawTime: "afterDraw",
          events: ['dblclick'],
          annotations: [{
          	id: 'low-box',
            type: 'box',
            xScaleID: 'x-axis-1',
            yScaleID: 'y-axis-1',
            xMin: -100,
            xMax: 100,
            yMin: -100,
            yMax: -40,
            backgroundColor: 'rgba(255, 0, 0, 0.3)',
            //borderColor: 'rgb(255, 0, 0)',
            borderWidth: 1
          },{
          	id: 'hi-box',
            type: 'box',
            xScaleID: 'x-axis-1',
            yScaleID: 'y-axis-1',
            xMin: -100,
            xMax: 100,
            yMin: 100,
            yMax: 40,
            backgroundColor: 'rgba(255, 0, 0, 0.3)',
            //borderColor: 'rgb(255, 0, 0)',
            borderWidth: 1
          }]
        }
      }
    });
    
    
    
    

    0 讨论(0)
提交回复
热议问题