chart.js 2.x中的自动颜色分配不再起作用,用于在1.x版中工作

Eug*_*nio 28 javascript charts chart.js

使用Chart.js 1.x我可以创建一个饼图并自动分配颜色:

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.1.1/Chart.js"></script>
<body>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart").getContext("2d");
var data = [{"label":"Conservative","value":"5"},{"label":"Democratic","value":"6"}];
var myChart = new Chart(ctx).Pie(data);
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

如果我对v 2.x做同样的事情

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.bundle.js"></script>
<body>
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart").getContext("2d");{"label":"Democratic","value":"6"}];
var myChart = new Chart(ctx, {
    type: 'pie',
    data: {
        labels: ["Conservative", "Democratic"],
        datasets: [{
            data: [5, 15],
        }]
    }
});
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

除非我手动指定颜色,否则整个饼图以灰色显示; 我错过了什么吗?我发现的唯一相关问题是这一个:Chart.js中的随机填充颜色,但是,如上所述,它完全适用于1.x所以我觉得它不再适用了.

xna*_*kos 60

我相信配色方案的创造本身就是一门完整的科学.我觉得这样的事情已经被Chart.js遗漏了,因为有更多的关键目标需要追求.文档中的图表示例中使用的所有颜色都是明确定义的.而这两个月之久的问题带有特色chart.js之构件,其默认的颜色不是chart.js之二可用,因此,你有三种选择一个明确的答复.第一选择是自己制作一些颜色.我想你不会问这个问题,你有没有这样的事情(我知道结果会很糟糕,如果这样做的话).第二种选择是在线寻找配色方案和配色方案,并选择一些让你满意的配色方案.第三个也是有趣的选择是寻找一个可以随意生成配色方案的JavaScript库.有几种替代选择.一个很好的,在非常宽松的许可下可用的是调色板生成器.您可以在此处看到Chart.js 2中的操作.样品也可在下面找到:

var ctx = document.getElementById("myChart");
var myData = [12, 19, 3, 5, 2, 3];
var myChart = new Chart(ctx, {
  type: 'pie',
  data: {
    labels: ["First", "Second", "Third", "Fourth", "Fifth", "Sixth"],
    datasets: [{
      label: '# of Votes',
      data: myData,
      backgroundColor: palette('tol', myData.length).map(function(hex) {
        return '#' + hex;
      })
    }]
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.3.0/Chart.min.js"></script>
<script src="https://raw.githubusercontent.com/google/palette.js/master/palette.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>
Run Code Online (Sandbox Code Playgroud)

这里描述如何使用库.简而言之,您可以使用以下方法从特定颜色方案创建10色调色板:

var seq = palette('tol-sq', 10);
Run Code Online (Sandbox Code Playgroud)

结果是一个十六进制字符串数组(例如"eee8d5").为了在Chart.js期望颜色的地方使用它,你可以使用map在每个字符串前加上"#",就像上面的例子一样.

  • 删除非常简单的默认调色板对我来说听起来不合逻辑(我在v1中看到了相关的代码并且非常简单)但是这是选择,你的解决方案非常有效,谢谢! (3认同)
  • 我正在寻找这个,因为我有大约 50 个标签,我不想定义 50 种颜色。这个解决方案工作正常,但是我不得不将 `palette` 的第一个参数更改为 `tol-dv`,因为 `tol` 仅支持 12 种颜色。 (2认同)

SAR*_*ose 7

我实际上会推荐ChartsJS-Plugin-ColorSchemes。只需在chartjs之后将其导入就可以自动进行着色,但是添加选项将使您能够制作自定义调色板。

...

  options: {

    plugins: {

      colorschemes: {

        scheme: 'tableau.Tableau20'

      }

    }

  }
Run Code Online (Sandbox Code Playgroud)

  • 我试图将此插件用于 Charts.js 3+,但它不兼容。我花了比我愿意承认的更长的时间才弄清楚这一点。也许我救了某人一些时间。 (9认同)
  • 这个选项很好,但似乎只适用于多个数据集。如果您有一个包含多个条/列/线的数据集,则所有数据集的颜色都相同。然而,@Zeke Egherman 上面的答案将这些条形着色为不同的颜色,因此更加灵活。这确实适用于多个数据集,尽管加上颜色选择看起来更好。 (4认同)