chart.js 条形图颜色根据值变化

新手上路,请多包涵

我有一个显示数据库数据的条形图,我需要能够为不同的数值显示不同的颜色。例如,’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
});

原文由 dchadney 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 705
2 个回答

您可以通过访问 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

原文由 Dola 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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
});

原文由 Ben Gardner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题