如何根据标签更改 Chart.js 点的颜色

2023-11-02前端开发问题
56

本文介绍了如何根据标签更改 Chart.js 点的颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个折线 Chart.js 图表,其中标签是星期几.我想根据今天(周一 - 周日)更改点背景.我可以根据数据值更改背景颜色,但这不是我需要的.相反,我想给每一天(标签)一个不同的颜色点.

例如,这就是我可以根据数据值更改点的方式(不是我需要的)

chartData: {标签:['星期一','星期二','星期三','星期三','星期四','星期五','星期六','星期日'],数据集:[{数据:[57, 569, 12, 78, 569, 0, 5],填写:真实,点半径:4,点背景颜色:函数(上下文){var index = context.dataIndexvar value = context.dataset.data[索引]返回值>100 ?绿色":红色"}}]},

但是当我尝试将其应用于标签时,出现错误:

<块引用>

TypeError: 无法读取 pointBackgroundColor 处未定义的属性0"

chartData: {标签:['星期一','星期二','星期三','星期三','星期四','星期五','星期六','星期日'],数据集:[{数据:[57, 569, 12, 78, 569, 0, 5],填写:真实,点半径:4,点背景颜色:函数(上下文){var index = context.dataIndex;var value = context.labels[索引];if (value == 'Monday') 返回'绿色'if (value == 'Tuesday') 返回'红色'if (value == 'Wednesday') 返回'蓝色'}}]},

解决方案

你可以给pointBackgroundColor属性一个颜色数组:

var ctx = document.getElementById('lineChart').getContext('2d');var colors = ["rgba(255,0,0,1)", "rgba(0,255,0,1)", "rgba(0,0,255,1)", "rgba(255,0,0,1)", "rgba(0,255,0,1)"];var colors1 = Object.assign([], colors);颜色1.sort();变量数据 = {标签: ["1","2","3","4","5",],数据集:[{标签:第 1 行",strokeColor: "rgba(151,187,205,1)",点半径:5,点背景颜色:颜色,填充:假,数据: [0.33771896,0.903282737,0.663260514,0.841077343,0.172840693,],}, {标签:平均",strokeColor: "rgba(245, 15, 15, 0.5)",点背景颜色:颜色1,点半径:5,填充:假,数据:[0.70934844,0.562981612,0.496916323,0.410302488,0.55354621]}]};变量选项 = {数据集填充:假,}var myChart = new Chart(document.getElementById("lineChart"), {类型:'线',数据,选项})

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></脚本>

<canvas id="lineChart" width="600" height="200"></canvas></div>

I have a line Chart.js chart where the labels are the days of week. I would like to change the point background depending on what day it is (Monday - Sunday). I am able to change the background color depending on the data values but that's not what I need. Instead, I want to give each day (label) a different color point.

For example, this is how I can change the points depending on the data values (not what I need)

chartData: {
    labels: ['Monday', 'Tuesday', 'Wednesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],

    datasets: [{
        data: [57, 569, 12, 78, 569, 0, 5],
        fill: true,
        pointRadius: 4,
        pointBackgroundColor: function(context) {
            var index = context.dataIndex
            var value = context.dataset.data[index]
            return value > 100 ? 'green' : 'red'
        }
    }]
},

But when I tried to apply this to labels, I got an error:

TypeError: Cannot read property '0' of undefined at pointBackgroundColor

chartData: {
    labels: ['Monday', 'Tuesday', 'Wednesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],

    datasets: [{
        data: [57, 569, 12, 78, 569, 0, 5],
        fill: true,
        pointRadius: 4,
        pointBackgroundColor: function(context) {
            var index = context.dataIndex;
            var value = context.labels[index];

            if (value == 'Monday') return 'green'
            if (value == 'Tuesday') return 'red'
            if (value == 'Wednesday') return 'blue'
        }
    }]
},

解决方案

You can give an array of colors to pointBackgroundColor property:

var ctx = document.getElementById('lineChart').getContext('2d');

var colors = ["rgba(255,0,0,1)", "rgba(0,255,0,1)", "rgba(0,0,255,1)", "rgba(255,0,0,1)", "rgba(0,255,0,1)"];
var colors1 = Object.assign([], colors);
colors1.sort();
var data = {
  labels: [
    "1 ",
    "2 ",
    "3 ",
    "4 ",
    "5 ",
  ],
  datasets: [{
    label: "line 1",
    strokeColor: "rgba(151,187,205,1)",
    pointRadius: 5,
    pointBackgroundColor: colors,
    fill: false,
    data: [
      0.33771896,
      0.903282737,
      0.663260514,
      0.841077343,
      0.172840693,

    ],
  }, {
    label: "Average",
    strokeColor: "rgba(245, 15, 15, 0.5)",
    pointBackgroundColor: colors1,
    pointRadius: 5,
    fill: false,
    data: [0.70934844,
      0.562981612,
      0.496916323,
      0.410302488,
      0.55354621
    ]
  }]
};

var options = {
  datasetFill: false,
}
var myChart = new Chart(document.getElementById("lineChart"), {
  type: 'line',
  data,
  options
})

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<div>
  <canvas id="lineChart" width="600" height="200"></canvas>
</div>

这篇关于如何根据标签更改 Chart.js 点的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

js删除数组中指定元素的5种方法
在JavaScript中,我们有多种方法可以删除数组中的指定元素。以下给出了5种常见的方法并提供了相应的代码示例: 1.使用splice()方法: let array = [0, 1, 2, 3, 4, 5];let index = array.indexOf(2);if (index -1) { array.splice(index, 1);}// array = [0,...
2024-11-22 前端开发问题
182

layui 实现实时刷新一个外部的div
主页面上显示了一个合计,在删除和增加的时候需要更改这个总套数的值: //html代码div class="layui-inline layui-show-xs-block" style="margin-left: 10px" id="sumDiv"spanSOP合计:/spanspan${totalNum}/spanspan套/span/div 于是在我们删除这个条数据后,...
2024-11-14 前端开发问题
156

layui要如何改变时间日历布局大小?
问题描述 我想改变layui时间日历布局大小,这个要怎么操作呢? 解决办法 可以用css样式对时间日历进行重新布局,具体代码如下: !DOCTYPE htmlhtmlheadmeta charset="UTF-8"title/titlelink rel="stylesheet" href="../../layui/css/layui.css" /style#test-...
2024-10-24 前端开发问题
271

JavaScript小数运算出现多位的解决办法
在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
2024-10-18 前端开发问题
301

JavaScript(js)文件字符串中丢失"\"斜线的解决方法
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转...
2024-10-17 前端开发问题
437

layui自定义内容打印
layui集成有打印功能,当我们需要自定义内容打印,需要怎么操作呢?以下是具体代码: div class="layui-inline" label class="layui-form-label"打印表格/label table id="table_info" tr td7/td td8/td td9/td /tr /table/divdiv class="layui-inline" a id=...
2024-10-15 前端开发问题
287