【问题标题】:chart.js bar chart change color based on valuechart.js 条形图根据值改变颜色
【发布时间】:2020-04-04 20:25:55
【问题描述】:
function argMax(array) {
  return array.map((x, i) => [x, i]).reduce((r, a) => (a[0] > r[0] ? a : r))[1];
}

// dummy data
var data = [12, 19, 1, 14, 3, 10, 9];
var labels = data.map((x, i) => i.toString()); 

// other data color
var color = data.map(x => 'rgba(75,192,192,0.4)');

// change max color
color[argMax(data)] = 'red';

var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: labels,
            datasets: [{
                    label: 'value',
                    data: data,
                    backgroundColor: color,
            }]
        }
});

大家好。我在这个论坛的Chart.js changing the color of the max value bar 找到了这个代码。但我不知道如何更改它以显示最大的三个值。

如何更改此代码以不同颜色显示最大的三个值?

【问题讨论】:

    标签: javascript chart.js


    【解决方案1】:

    给定名为“data”的number 值中的array,您可以从中创建一个排序数组。然后你 map 原始数据的值,根据它在排序后的 array 中的位置返回适当的颜色。

    const backgroundColors = data.map(v => sortedData.indexOf(v) >= data.length - 3 ? 'red' : 'green');
    

    请查看下面的可运行代码示例。

    const labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O'];
    const data = labels.map(l => Math.floor(Math.random() * 1000) + 1);
    const sortedData = data.slice().sort((a, b) => a - b);
    const backgroundColors = data.map(v => sortedData.indexOf(v) >= data.length - 3 ? 'red' : 'green');
    
    new Chart(document.getElementById('myChart'), {
      type: 'bar',
      data: {
        labels: labels,
        datasets: [{
          label: "My Dataset",
          data: data,
          backgroundColor: backgroundColors
        }]
      },
      options: {
        legend: {
          display: false
        },
        scales: {
          yAxes: [{
            ticks: {
              beginAtZero: true
            }
          }]
        }
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
    <canvas id="myChart" height="90"></canvas>

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多