1

I'm using chart.js to plot a dataset, which is a ratio of two variables and it ranges from 10 to -10. But most of the time it swings around y=1.

I'm trying to plot a filled line plot of this dataset with the help of chart.js3. How do I change the direction of fill when it goes below 1(i.e. y<1) instead of default y=0?

  • Origin is a cast-iron feature in coordinate systems, you can't move it. Instead, you can emulate a "moved origin" by adding an offset to the values. – Teemu Mar 24 '22 at 13:08
  • @Teemu Thank you for the comment. Is there a way to plot the area without modifying the dataset? Are there any built-in options, my dataset is huge and plotting it against time axis in real time. So, I'm looking for a simple and lightweight option. – LegionNexus Mar 24 '22 at 13:33

1 Answers1

0

You can set an object for the fill in which you can configure this:

const options = {
  type: 'line',
  data: {
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [{
      label: '# of Votes',
      data: [12, 19, 3, 5, 2, 3],
      borderColor: 'orange',
      fill: {
        target: {
          value: 8
        },
        above: 'rgb(255, 0, 0)', // Area will be red above the value 8
        below: 'rgb(0, 0, 255)' // And blue below the value 8
      }
    }]
  },
  options: {}
}

const ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
  <canvas id="chartJSContainer" width="600" height="400"></canvas>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.1/chart.js"></script>
</body>

docs

LeeLenalee
  • 27,463
  • 6
  • 45
  • 69
  • Thanks, it worked. It's a bummer that I've tried every other fill option from that chart.js documentation except the 'target value' option, don't know why. Probably because of this "{fill: {value: 25}} // 5: fill to axis value 25", I thought, it will fill up to y = 25. – LegionNexus Mar 24 '22 at 14:04