Удалите лишние линии на оси y с помощью chartjs

Интересно, как убрать лишние линии на линейном графике. Я попытался установить для drawborder значение false, но, конечно, он просто удалил все линии оси. Я просто хотел избавиться от нежелательных вертикальных линий, которые указывают на метки оси Y, как на изображении ниже с красной меткой.

введите описание изображения здесь

Шаблон:

<d-chartrecord 
     :chart-data="datacollection" 
     v-bind:options="options"
     :height="200"
></d-chartrecord>

Сценарий:

export default {
    data () {
        return {
            datacollection: {},
            options: {
                responsive: true,
                legend: {
                  display: false,
                },
                scales: {
                    xAxes: [{
                        gridLines: {
                            display: true,
                            color: '#D7D7D7'
                        },
                        ticks: {
                            fontSize: 8,
                            beginAtZero: true
                        },
                        gridLines: {
                            display: true,
                        }
                    }],
                    yAxes: [{
                        display: true,
                        ticks: {
                            fontSize: 8,
                            beginAtZero: true,
                            stepSize: 50,
                            maxTicksLimit: 3
                        }
                    }],
                }
            },

        }
    },
    mounted () {
        this.putData()
    },
    methods: {
        putData () {
            this.datacollection = {
                labels: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
                datasets: [{
                    lineTension: 0,
                    radius: 4,
                    borderWidth: 1,
                    borderColor: '#F2A727',
                    pointBackgroundColor:[ '#fff', '#fff', '#fff', '#fff', '#fff', '#F2A727'],
                    backgroundColor: 'transparent',
                    data: [this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt()]
                }]
            }
        },
        getRandomInt  () {
            return Math.floor(Math.random() * (95)) + 5
        }
    }
}

person claudios    schedule 07.08.2017    source источник
comment
вы можете попробовать этот метод, чтобы изменить цвет на прозрачный: stackoverflow.com/questions/37153466/   -  person Horken    schedule 07.08.2017


Ответы (3)


К сожалению, на данный момент в ChartJS нет встроенных функций для этого. Для этого вам лучше создать плагин диаграммы.

ᴘʟᴜɢɪɴ (ᴅʀᴀᴡ 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();
      });
   }
});

* поместите это в начало вашего скрипта

ᴡᴏʀᴋɪɴɢ ᴇ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>

person ɢʀᴜɴᴛ    schedule 07.08.2017
comment
Привет, спасибо этому человеку, который просто понял, как это сделать с помощью vue-chartjs. - person claudios; 07.08.2017
comment
уже добавил скрипт вверху того места, где я вызываю данные диаграммы, но не повезло. Я думаю, что это проблема var ctx = chart.chart.ctx Пожалуйста, посмотрите пример кода, который я приложил, чтобы узнать, как я вызываю диаграмму. Благодарность - person claudios; 07.08.2017
comment
попробуйте добавить плагин, в который вы импортируете этот модуль (тот, который указан в вашем вопросе) - person ɢʀᴜɴᴛ; 07.08.2017
comment
Просто скопировать и вставить этот код не получится: «Chart.plugins.register не является функцией». Как заставить его работать? Спасибо за вашу помощь. - person Klyner; 09.08.2017
comment
@Klyner Используйте последнюю версию ChartJS - 2.6.0 - person ɢʀᴜɴᴛ; 09.08.2017
comment
@ ℊααnd Это работает. Но теперь у меня другая проблема: первая вертикальная линия удалена, а остальные стали толще, чем раньше .. - person Klyner; 09.08.2017
comment
@Klyner хм. Понимаю, у вас другой случай. нужны доработки плагина. отправлю его по вашему вопросу через некоторое время. - person ɢʀᴜɴᴛ; 09.08.2017
comment
@ ℊααnd Большое спасибо! Когда я меняю pointBorderWidth моей первой строки на «1», ширина хорошая. Но я не этого хочу;) - person Klyner; 09.08.2017

В файле chart.js gridLines предоставляет параметр tickMarkLength для отключения длины за пределами осей, например:

 yAxes: [{
          gridLines: {
            tickMarkLength: 0,
          },
        }] 
xAxes: [{
          gridLines: {
            tickMarkLength: 0,
          },
        }]
person Ishaank Gupta    schedule 02.07.2018

в Chart.js (я использую версию 2.9) gridLines также предоставляет возможность отключить галочку: drawTicks.

scales: {
  xAxes: [{
    gridLines:{
      drawTicks: false
    }
  }]
}
person Rendra Pradana    schedule 10.10.2020