当前位置: 首页 > 知识库问答 >
问题:

对于大于零或小于零的值,如何更改Y轴上的颜色?图表js 2.6

朱锦
2023-03-14

使用图表。JS2.6是否有一种方法可以动态更改图表中大于零和小于零的条形图?图形系列数据是通过调用方法生成的。现在它只是一个随机数生成器,但将是一个DB调用。

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

图表如下所示:

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

感谢您的回复。提前谢谢!

格里夫

**编辑**从下面的答案中添加代码如下:

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

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

共有2个答案

司空朝
2023-03-14

在chartjs v3中,您可以使用简单的脚本选项示例:

    datasets: [
          {
            data: this.chartData,
            backgroundColor(context) {
              const index = context.dataIndex
              const value = context.dataset.data[index]
              return value < 0 ? 'red' : 'blue'
            }
          }
        ]

参观https://www.chartjs.org/docs/latest/general/options.html#scriptable-选择权

索令
2023-03-14

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

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>
 类似资料:
  • 问题内容: 嘿,我不断出现错误: 索引(从零开始)必须大于或等于零且小于参数列表的大小。 我的代码: 问题答案: 你的第二个用途是一个占位符,但你只传递一个参数,所以你应该使用来代替。 更改此: 对此:

  • 在下面的代码中,我希望减小y轴和x轴值的字体大小。我搜索并找到了以下代码: 假设您想减少数轴的字体大小,请使用以下代码: 假设要减小CategoryAxis的字体大小,请使用以下代码: 但不幸的是,轴的大小并没有减小。我做错什么了吗? 此示例代码:

  • 问题内容: 我该如何忽略和制造? 问题答案: 分母之前检查分母是否为零。这样可以避免捕获异常的开销,如果您希望将其除以零,则可能会更有效率。

  • 我有一种情况,我需要检查金额并相应地返回回复。 如果金额是 请参考请求正文中的示例json。 {“帐户名称”:“ABCZYZ”、“特殊代码”:“MYCODE”、“金额”:“100”、“货币类型”:“MYCURRENCY”} 下面是我的wiremck映射文件 {“request”:“{“urlPattern”:“/some/url”,“method”:“POST”,“bodyPatterns”:[{

  • 嗨,我正在为我的Java课程创建一个战舰程序。现在,我正在尝试开发一个射击类。为了开火,我试图将背景颜色从蓝色(这意味着它只是一个空单元格)改为黄色(以表明我已经在该单元格中开火,但那里什么也没有)。 这是Fire类的代码。如果您认为有必要,我可以包含它继承的其他类。我遇到的主要问题是尝试让我的“for”循环通过,并根据我想要的迭代次数将背景从蓝色更改为黄色。100是用于测试目的的任意数字。 谢谢

  • 问题内容: 如果值大于零,如何比较? 问题答案: 就像这样简单: 的文档实际上指定了它将返回-1、0或1,但是更通用的方法仅保证在适当的三种情况下小于零,零或大于零- 因此,我通常只是坚持这种比较。