[Chartjs]-Remove excess lines on y axis using chartjs

3👍

Unfortunately, there isn’t any native functionality for this in ChartJS at the moment. You would rather need to create a chart plugin to achieve that.

ᴘʟᴜɢɪɴ (ᴅʀᴀᴡ x-ᴀxɪꜱ ɢʀɪᴅ-ʟɪɴᴇꜱ)
­

Chart.plugins.register({
   beforeDraw: function(chart) {
      var ctx = chart.chart.ctx,
          x_axis = chart.scales['x-axis-0'],
          topY = chart.scales['y-axis-0'].top,
          bottomY = chart.scales['y-axis-0'].bottom;
      x_axis.options.gridLines.display = false;
      x_axis.ticks.forEach(function(label, index) {
         if (index === 0) return;
         var x = x_axis.getPixelForValue(label);
         ctx.save();
         ctx.beginPath();
         ctx.strokeStyle = x_axis.options.gridLines.color;
         ctx.moveTo(x, topY);
         ctx.lineTo(x, bottomY);
         ctx.stroke();
         ctx.restore();
      });
   }
});

* place this at the top of your script

ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ ⧩

Chart.plugins.register({
   beforeDraw: function(chart) {
      var ctx = chart.chart.ctx,
          x_axis = chart.scales['x-axis-0'],
          topY = chart.scales['y-axis-0'].top,
          bottomY = chart.scales['y-axis-0'].bottom;
      x_axis.options.gridLines.display = false; // hide original grid-lines
      // loop through x-axis ticks
      x_axis.ticks.forEach(function(label, index) {
         if (index === 0) return;
         var x = x_axis.getPixelForValue(label);
         ctx.save();
         ctx.beginPath();
         ctx.strokeStyle = x_axis.options.gridLines.color;
         ctx.moveTo(x, topY);
         ctx.lineTo(x, bottomY);
         ctx.stroke();
         ctx.restore();
      });
   }
});

var chart = new Chart(ctx, {
   type: 'line',
   data: {
      labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
      datasets: [{
         label: 'LINE',
         data: [3, 1, 4, 2, 5],
         backgroundColor: 'rgba(0, 119, 290, 0.2)',
         borderColor: 'rgba(0, 119, 290, 0.6)',
         fill: false,
         tension: 0
      }]
   },
   options: {
      scales: {
         yAxes: [{
            ticks: {
               beginAtZero: true,
               stepSize: 1
            },
            gridLines: {
               display: false
            }
         }]
      }
   }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="ctx"></canvas>

6👍

In chart.js, gridLines provides an option tickMarkLength to disable the length beyond the axes, Eg:

 yAxes: [{
          gridLines: {
            tickMarkLength: 0,
          },
        }] 
xAxes: [{
          gridLines: {
            tickMarkLength: 0,
          },
        }]

1👍

in Chart.js (I’m using version 2.9), gridLines also provides an option to disable the tick mark : drawTicks.

scales: {
  xAxes: [{
    gridLines:{
      drawTicks: false
    }
  }]
}

Leave a comment