javascript - 如何更改 Y 轴上高于零值、低于零值的颜色?图表.js 2.6

标签 javascript charts drawing chart.js2

使用 chart.js 2.6 有没有办法动态更改图表中高于零和低于零的值的条形图?图形系列数据是通过调用方法生成的。现在它只是一个随机数生成器,但将是一个数据库调用。

function changeWOWData(chart) {
    var datasets = chart.data.datasets;
    var labelLen = chart.data.labels.length;
    if (datasets[0]) {
        for (i = 0, len = datasets.length; i < len; i++) {
            try {
                for (j = 0, len = labelLen; j < len; j++) {
                    datasets[i].data[j] = getRandomInt(-100, 100);
                }

            } catch (e) {
                console.log(e.message);
            }
        }
    }
}

图表看起来像这样:

enter image description here

我希望零以上的图表条为蓝色,零以下的条为红色。

感谢任何/所有回复。提前致谢!

格里夫

** 编辑 ** 添加以下答案中的代码:

var myBarChart = new Chart(wowChart, {
    type: 'bar',
    data: wowData,
    plugins: [{
        beforeDraw: function (c) {
            var data = c.data.datasets[0].data;
            for (var i in data) {
                try {
                    var bar = c.data.datasets[0]._meta[0].data[i]._model;
                    if (data[i] > 0) {
                        bar.backgroundColor = '#07C';
                    } else bar.backgroundColor = '#E82020';

                } catch (ex) {
                    console.log(ex.message);
                }
                console.log(data[i]);
            }
        }
    }],
    options: wowOptions
});

控制台的每一行我都会看到数据元素以及异常

enter image description here

最佳答案

您可以使用以下图表插件完成此操作:

plugins: [{
   beforeDraw: function(c) {
      var data = c.data.datasets[0].data;
      for (let i in data) {
         let bar = c.data.datasets[0]._meta['0'].data[i]._model;
         if (data[i] > 0) {
            bar.backgroundColor = '#07C';
         } else bar.backgroundColor = '#E82020';
      }
   }
}]

添加这个,然后添加您的图表选项

ᴅᴇᴍᴏ

var ctx = document.getElementById("canvas").getContext('2d');
var myChart = new Chart(ctx, {
   type: 'bar',
   data: {
      labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
      datasets: [{
         label: 'LEGEND',
         data: [9, 14, -4, 15, -8, 10]
      }]
   },
   options: {},
   plugins: [{
      beforeDraw: function(c) {
         var data = c.data.datasets[0].data;
         for (let i in data) {
            let bar = c.data.datasets[0]._meta['0'].data[i]._model;
            if (data[i] > 0) {
               bar.backgroundColor = '#07C';
            } else bar.backgroundColor = '#E82020';
         }
      }
   }]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="canvas" height="180"></canvas>

关于javascript - 如何更改 Y 轴上高于零值、低于零值的颜色?图表.js 2.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593045/

相关文章:

c - opengl glDrawElements 问题

javascript - 如何使用 paper.js 获取两点之间的路径段?

javascript - 在客户端设置显示没有任何 asp 面板在任何 linkBut​​tonclick 上重新显示它

javascript - 一次提交2份表格

javascript - setInterval 不适用于 MS 中的长间隔

graph - 如何调整 APEX 中图形/图表的范围?

php - 图表中来自数据库的 fusionCharts 数据

javascript - 谷歌图表 : AreaChart vAxis Gridlines is Not Drawing

iphone - 为什么 UIBezierPath 比 Core Graphics 路径快?

javascript - 如何获取选择之前、内部和之后的 HTML(不在 textarea 中)?