Как уменьшить количество нескольких линий сетки в гистограмме стека chart.js

#javascript #angular #chart.js

#javascript #angular #chart.js

Вопрос:

Я работаю над chart.js реализацией гистограммы стека. Этот график имеет несколько проблем, таких как

  • Не отображается размер тика по вертикали слева
  • Отображение нежелательных горизонтальных линий сетки
  • Отображение горизонтальной толстой линии сверху, а не снизу

Это мой код

 public stackbar()
{
  Chart.defaults.global.datasets.bar.barPercentage = 0.5;
  Chart.defaults.global.datasets.bar.categoryPercentage = 0.5;

  var colors = ['#299DFF','#80FFFF','#F8362B',];
  var chBar = document.getElementById("mychart");
  var chartData = {
  labels: ["Product"],
  datasets: [{
    label: 'P2',
    data: [29566],
    backgroundColor: colors[0]
  },
  {
    label: 'P3',
    data: [O2],
    backgroundColor: colors[1]
  },
  {
    label: 'P4',
    data: [3],
    backgroundColor: colors[2]
  }
]
};
if (chBar) {
  new Chart(chBar, {
  type: 'bar',
  data: chartData,
  options: {
    scales: {
      xAxes: [{
        gridLines: {
          display:false
      },
      //barPercentage: 0.5,
      //categoryPercentage: 0.5    
        barPercentage: 0.5,
        categoryPercentage: 0.5
      }
    
    ],
      yAxes: [{
        gridLines: {
          display:true
      },
        type: 'logarithmic',
        ticks: {
          beginAtZero: true,
          userCallback: (value, index) => {
            const remain = value / (Math.pow(10, Math.floor(Chart.helpers.log10(value))));
            if (remain == 1 || remain == 2 || remain == 5 || index == 0) {
              return value.toLocaleString();
            }
            return '';
          },       
          suggestedMax: 80,
          padding: 25
        }
      }]
    },
    legend: {
      display: true,
      maxWidth: 100,
      padding:30,      
      fullWidth:true,            
      position: 'bottom',
      lineHeight: 12,      
      justifyContent: 'space-between',
      labels: {
          fontSize: 10,
          usePointStyle: true
      }
    },
  }
  });
}
  

Это скриншот

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

Как я могу исправить эти проблемы?

Ответ №1:

Горизонтальные линии сетки можно удалить с помощью следующей конфигурации в параметрах диаграммы:

 yAxes: [{
  gridLines: {
    display: false
  },
  

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

 var colors = ['#299DFF', '#80FFFF', '#F8362B'];
var chartData = {
  labels: ["Product"],
  datasets: [{
      label: 'P2',
      data: [29566],
      backgroundColor: colors[0]
    },
    {
      label: 'P3',
      data: [2],
      backgroundColor: colors[1]
    },
    {
      label: 'P4',
      data: [3],
      backgroundColor: colors[2]
    }
  ]
};

new Chart('myChart', {
  type: 'bar',
  data: chartData,
  options: {
    scales: {
      xAxes: [{ 
          barPercentage: 0.5,
          categoryPercentage: 0.5
        }
      ],
      yAxes: [{
        gridLines: {
          display: false
        },
        type: 'logarithmic',
        ticks: {
          beginAtZero: true,
          userCallback: (value, index) => {
            const remain = value / (Math.pow(10, Math.floor(Chart.helpers.log10(value))));
            if (remain == 1 || remain == 2 || remain == 5 || index == 0) {
              return value.toLocaleString();
            }
            return '';
          }
        }
      }]
    },
    legend: {
      display: true,
      maxWidth: 100,
      padding: 30,
      fullWidth: true,
      position: 'bottom',
      lineHeight: 12,
      justifyContent: 'space-between',
      labels: {
        fontSize: 10,
        usePointStyle: true
      }
    }
  }
});  
 <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
<canvas id="myChart" height="150"></canvas>  

Комментарии:

1. Спасибо за ваш ответ. Возможно ли увеличить размер шага почти на 5 тыс. Он выглядит плотным.

2. Да, взгляните на Chart.js документы. Задается stepSize в объекте оси ticks : chartjs.org/docs/latest/axes/cartesian /…

3. Привет, я не могу видеть размер шага, он просто показывает 30 кб сверху. Я просто скопировал вставленный ваш код. добавлены script in html , используются "chart.js-2.9.3" и импортируются node_modules/chart.js .

4. Разница в моей диаграмме заключается в удалении линий сетки, отображающих нижнюю, левую и правую линии. Мой html <canvas id="chBar" width="350" height="260"></canvas>