Измените цвет одного значения на оси x charts.js

#javascript #chart.js

Вопрос:

Я строю столбчатую диаграмму в Charts.js. Я хочу, чтобы моя ось x имела 2 цвета: один цвет для значения на моей оси x, которое имеет самую высокую полосу, и другой цвет для остальных значений. Например — здесья хочу, чтобы значение «ничего не делать» было другого цвета. Вот как я строю свою диаграмму:

 const myChart = new Chart(ctx, {   type: 'bar',  data: {  labels: data.xs_action,  datasets: [{  label: ['Head_1= Right Lane'],  data: data.ys_H1a,  backgroundColor: ['rgba(255, 99, 132, 0.2)', ],  borderColor: ['rgba(255, 99, 132, 1)', ],  borderWidth: 1,  stack: 'Stack 0',  },   {  label: ['Head_2 = High Speed'],  data: data.ys_H2a,  backgroundColor: ['rgba(54, 162, 235, 0.2)', ],  borderColor: ['rgba(54, 162, 235, 1)', ],  borderWidth: 1,  stack: 'Stack 0',  },   {  label: ['Head_3 = Change Lane'],  data: data.ys_H3a,  backgroundColor: ['rgba(255, 206, 86, 0.2)', ],  borderColor: ['rgba(255, 206, 86, 1)', ],  borderWidth: 1,  stack: 'Stack 0',  },   ]   },  options: {  scales: {  x: {  gridLines: {  display: false,  },   ticks: {  color: 'blue',  }  },  y: {  gridLines: {  display: false,  },  }  }  }   });  }  

В моих данных у меня также есть позиция значения x, которое я хочу отобразить другим цветом.

Ответ №1:

Для этого вы можете использовать настраиваемый параметр для цвета галочки:

 var options = {  type: 'bar',  data: {  labels: ["Red", "Blue", "Yellow"],  datasets: [{  label: ['Head_1= Right Lane'],  data: [10, 5, 6],  backgroundColor: ['rgba(255, 99, 132, 0.2)', ],  borderColor: ['rgba(255, 99, 132, 1)', ],  borderWidth: 1,  },   {  label: ['Head_2 = High Speed'],  data: [2, 6, 5],  backgroundColor: ['rgba(54, 162, 235, 0.2)', ],  borderColor: ['rgba(54, 162, 235, 1)', ],  borderWidth: 1,  },   {  label: ['Head_3 = Change Lane'],  data: [10, 3, 4],  backgroundColor: ['rgba(255, 206, 86, 0.2)', ],  borderColor: ['rgba(255, 206, 86, 1)', ],  borderWidth: 1,  }  ]  },  options: {  scales: {  x: {  stacked: true,  grid: {  display: false  },  ticks: {  color: (ctx) =gt; {  const maxValues = ctx.chart.data.datasets.reduce((acc, curr) =gt; {  curr.data.forEach((e, i) =gt; {  if (acc[i]) {  acc[i] = acc[i]   e;  } else {  acc[i] = e;  }  });  return acc;  }, {});   const labelIndex = ctx.chart.data.labels.indexOf(ctx.tick.label);   return maxValues[labelIndex] === Math.max(...Object.values(maxValues)) ? 'blue' : 'red'  }  }  },  y: {  stacked: true,  grid: {  display: false  }  }  }  } }  var ctx = document.getElementById('chartJSContainer').getContext('2d'); new Chart(ctx, options); 
 lt;bodygt;  lt;canvas id="chartJSContainer" width="600" height="400"gt;lt;/canvasgt;  lt;script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.6.0/chart.js"gt;lt;/scriptgt; lt;/bodygt; 

Кстати, пространство имен для сетки было изменено в версии V3 с gridLines на grid , поэтому ваши линии сетки не скрыты.