基于 C3js 圆环图数据的条件颜色

Conditional colors based on data on Donut chart with C3js

我想知道如何创建圆环图,其中特定切片的颜色取决于数据。我设法在条形图中相当容易地实现了这一点,使用:

color: function (color, d) {

if (d.value < 25) {
 return "#f00";
}

但我想不出甜甜圈。

我的意思是:

例如:A为45,B为55,A片为红色。 B 是灰色的。输入数据更改(即图表被刷新)。 A 现在是 60 岁,B 是 40 岁。B 仍然是灰色的(一直都是),但 A 现在应该是橙色的。输入数据更改。 A是90,B是10。B是灰色的。 A为绿色,依此类推

非常感谢您的帮助! \o/

我认为这很简单,但我无法在颜色函数中获取图表对象的句柄,并且 'this' 始终是 Window 对象或未定义。

这就是我所做的,它涉及使用外部变量作为缓存:

基本上调用 color 有两个参数,第一个总是现有的颜色,第二个可以是数据的 id,或者是一个更大的数据对象,包括那个甜甜圈扇区的值。我使用第二种情况填充一个值到遇到第一种情况时使用的缓存。

var temp = {};
var chart = c3.generate({
    data: {
        columns: [
            ['data1', 30],
            ['data2', 120],
        ],
        color: function (color, d) {
            console.log (arguments, this, chart);
            if (d.values) {
                var id = d.id;
                var newColour = d.values[0].value > 40 ? "red" : "blue";
                temp[id] = newColour;
            }
            return temp[d] || color;
        },
        type : 'donut',
    },
    donut: {
        title: "Iris Petal Width"
    }
});

复制到https://c3js.org/samples/chart_donut.html中查看运行


答案 2

实际上,另一种(未记录的)方法是这样的:

color: {
    pattern: ['red', 'green', 'blue', 'orange', 'turquoise'], // colors for values
    threshold: {
        values: [30, 60, 90, 100, 150]
    }
}

一个扇区在第一个阈值小于它的索引处呈现图案数组中的颜色(例如,59 小于 60,因此该值将为绿色)

不过,这确实会填充某些数据系列的静态颜色,如果您想要的话,也可以通过任何方式进行连续色标