【发布时间】:2017-05-04 18:36:25
【问题描述】:
我让用户从下拉列表中选择四个数字系列之一,以驱动气泡图中的圆圈着色。 (半径、x 和 y 也有类似的下拉菜单。)
d3.select("select#colour").on('change',function(d) {
var tempIndex = this.selectedIndex;
yearlyBubbleChart.colorAccessor(function (p) {
return p.value[optionArray[0][tempIndex]];
});
yearlyBubbleChart.colors(colorbrewer[optionArray[7][tempIndex]][optionArray[8][tempIndex]]);
yearlyBubbleChart.colorDomain([optionArray[5][tempIndex][0], optionArray[5][tempIndex][1]]);
});
为此,我按顺序使用 colorAccessor、colors 和 colorDomain。 (我注意到在某些情况下这三个的顺序很重要。)我希望用户能够选择最小和最大颜色,并从中驱动颜色。为此,我需要用两种颜色为气泡着色,例如['白色','蓝色']。数值越高,相应地越蓝。
这似乎是一件很容易做到的事情,但我无法解决。提供两种颜色的数组通常用于交替,在气泡图中,最小的气泡是白色的,其余的是蓝色的。如何通过仅输入两种颜色来获得连续的颜色范围?
谢谢
【问题讨论】:
-
这里的关键是colorMixin.colors()可以采用任何类型的d3比例。如果你向它传递一个颜色数组,它会为你创建一个ordinal scale,但你可以使用如下@Paul 所示的线性比例,或者如果你将一个连续域映射到一组离散的颜色。
-
是的,如果你look at the source for the color mixin,你就会明白为什么你需要在
colorDomain之前调用colors——前者替换了刻度,后者在当前刻度上设置了一个参数。
标签: javascript d3.js colors dc.js crossfilter