【问题标题】:chart.js bar chart color change based on valuechart.js 条形图颜色根据值变化
【发布时间】:2016-06-08 14:24:20
【问题描述】:

我有一个显示来自数据库的数据的条形图,我需要能够为不同的数值显示不同的颜色。例如,'loc_health' 返回的值介于 1 和 10 之间,因此我需要将 1 显示为红色,2 显示为橙色,3 显示为黄色,4 显示为绿色等...

我已经搜索了 chart.js 文档,但找不到解决方案。

var context = document.getElementById('healthRatings').getContext('2d');

window.myObjBar = new Chart(context).Bar({
    labels : loc_id_grab,
    datasets : [{
        fillColor : ["rgba(220,220,220,0.5)"],
        strokeColor : "rgba(151,187,205,1)",
        pointColor : "rgba(151,187,205,1)",
        pointStrokeColor : "#fff",
        data : loc_health
    }]
}, {
    scaleOverride : true,
    scaleSteps : 10,
    scaleStepWidth : 1,
    scaleStartValue : 0,
    barShowStroke : false,
    barStrokeWidth : 1,
    showTooltips : false,
    barValueSpacing : 2,
    animation : false,
    responsive : true,
    maintainAspectRatio : true
});

【问题讨论】:

标签: javascript bar-chart chart.js


【解决方案1】:

您可以通过访问window.myObjBar.datasets[0].bars[0].fillColor 属性为每个条形着色,然后更新图表

在您的情况下,您可以循环遍历您的元素并相应地为每个条着色

    var bars = myObjBar.datasets[0].bars;
    for(i=0;i<bars.length;i++){
       var color="green";
       //You can check for bars[i].value and put your conditions here
       bars[i].fillColor = color;

    }
    myObjBar.update(); //update the chart

一个工作的JsFiddle

【讨论】:

    【解决方案2】:

    您可以在创建图表之前检查值:

    var context = document.getElementById('healthRatings').getContext('2d');
    
    var colors = []
    for(var i = 0; i < loc_health.length; i++){
       var color;
       switch(loc_health[i]){
           case 1:
               color = "red";
               break;
           case 2:
               color = "orange";
               break;
           case 3:
               color = "yellow";
               break;
           case 4:
               color = "green";
               break;
           //etc..
       }
       colors[i] = color;
    }
    
    window.myObjBar = new Chart(context).Bar({
        labels : loc_id_grab,
        datasets : [{
            backgroundColor: colors,
            strokeColor : "rgba(151,187,205,1)",
            pointColor : "rgba(151,187,205,1)",
            pointStrokeColor : "#fff",
            data : loc_health
        }]
    }, {
        scaleOverride : true,
        scaleSteps : 10,
        scaleStepWidth : 1,
        scaleStartValue : 0,
        barShowStroke : false,
        barStrokeWidth : 1,
        showTooltips : false,
        barValueSpacing : 2,
        animation : false,
        responsive : true,
        maintainAspectRatio : true
    });
    

    【讨论】:

      【解决方案3】:

      你可以这样做

      changeColor(loc_health);
      
      function changeColor(random_value){
         switch(random_value){
             case = 1:
                datasets[0].fillColor = "#000";
                break;
             case = 2:
                //etc
      
         }
         myObjBar.update();
      }
      

      在您的 Chart 实例上调用 update() 将使用任何更新的值重新渲染图表,允许您编辑多个现有点的值,然后在一个动画渲染循环中渲染这些点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-21
        相关资源
        最近更新 更多