我知道在Chart.js中,您可以将一组 colored颜色 传递给backgroundColor option,但是否可以使用当前的dataset项来 Select colored颜色 ?理想情况下,我想做一些类似的事情:

new Chart(ctx, {
  type: "pie",
  data: {
    datasets: [{
      data: scores,
      backgroundColor: (context) => {
         // This is the key bit. Can I somehow access the current
         // dataset item here from the context?
        return context.item.colour
      }
    }]
  }
})

下面是一个工作示例,其中backgroundColor是一个数组,但我想将其更改为使用一个回调函数来设置基于当前数据集项的背景:

const ctx = document.getElementById('chart')

const dataSet = [
  { name: 'John', score: 10, colour: 'orange' },
  { name: 'Bob', score: 5, colour: 'yellow', },
  { name: 'Alice', score: 20, color: 'pink' }
]

const scores = dataSet.map(data => data.score)

new Chart(ctx, {
  type: "pie",
  data: {
    datasets: [{
      data: scores,
      backgroundColor: ['red', 'green', 'blue'] // Is there a way I can choose the colour based on the dataset item. Ideally, I'd want to access the array item from dataSet and read the `colour` property from there.
    }]
  }
})
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="chart"></canvas>

推荐答案

要访问Scripable选项中的 colored颜色 ,您需要将数据集按原样传递给chart.js,并使用配置中的parsing选项告诉chart.js数据必须显示在对象的哪个字段中:

const ctx = document.getElementById('chart')

const dataSet = [{
    name: 'John',
    score: 10,
    colour: 'orange'
  },
  {
    name: 'Bob',
    score: 5,
    colour: 'yellow',
  },
  {
    name: 'Alice',
    score: 20,
    colour: 'pink'
  }
]

new Chart(ctx, {
  type: "pie",
  data: {
    datasets: [{
      data: dataSet,
      backgroundColor: (c) => c.raw.colour,
    }]
  },
  options: {
    parsing: {
      key: 'score'
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<canvas id="chart"></canvas>

Javascript相关问答推荐

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

为什么JavaScript双边字符串文字插值不是二次的?

如何在表格上拥有水平滚动条,在正文页面上拥有垂直滚动条,同时还对html表格的标题使用位置粘性?

有条件的悲剧

传递一个大对象以在Express布局中呈现

Angular中计算信号和getter的区别

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

在观察框架中搜索CSV数据

在JS中拖放:检测文件

如何将innerHTML字符串修剪为其中的特定元素?

如何将未排序的元素追加到数组的末尾?

如何使用TypeScrip设置唯一属性?

OpenAI转录API错误请求

如何在一个对象Java脚本中获取不同键的重复值?

Phaser3 preFX addGlow不支持zoom

P5JS-绘制不重叠的圆

Django模板中未加载JavaScript函数

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

计算对象数组中属性的滚动增量

脚本语法错误只是一个字符串,而不是一个对象?