d3 - 调用函数后颜色发生变化

时间:2015-11-04 12:01:56

标签: d3.js

我是d3的新手,我尝试制作堆叠/分组直方图。

我定义了这样的全局颜色定义:

var c_gender = d3.scale.ordinal()
    .domain(["missing", "present"])
    .range(["#54278f", "#DADAEB"]);

我用它来填充rects(5个rects for 2 variable = 10 rects如果分组,5个如果堆叠)在我的直方图中。一切正常,但我注意到颜色的域已被更改。我在其他图表中使用此颜色定义,因此域名不正确。 使用颜色修改我的rects的样式后,更多的值将添加到颜色的域中,如下所示:

var dataset = [
    [
        { x: 0, y: missing_age_array.length },
        { x: 1, y: missing_gender_array.length },
        { x: 2, y: missing_weight_array.length },
        { x: 3, y: missing_height_array.length },
        { x: 4, y: missing_ethnicity_array.length }
    ],
    [
        { x: 0, y: present_age_array.length },
        { x: 1, y: present_gender_array.length },
        { x: 2, y: present_weight_array.length },
        { x: 3, y: present_height_array.length },
        { x: 4, y: present_ethnicity_array.length }
    ]
];


data_stack = d3.layout.stack()(dataset);
...
console.log(c_gender.domain());
var layers = vis.selectAll("layer")
        .data(data_stack)
        .enter().append("g")
        .style("fill", function(d, i) { return c_gender(i / (n - 1))    ; })
        .attr("class", "layer");
console.log(c_gender.domain());
...

,console.log结果为:

["missing", "present"]
["missing", "present", 0, 1]

我不确定这个解释是否清楚..但是有人可以帮助我理解为什么在调用函数后颜色的域被改变了吗?

TYIA  -monica

1 个答案:

答案 0 :(得分:1)

查看documentation for ordinal scales

  

在输入域中给定值x,返回输出范围中的相应值。

     

如果明确指定范围[...]并且给定值x为   不在规模的域中,则x被隐式添加到域中;

通过调用c_gender(i / (n - 1)),您可以在域中隐式添加0和1作为值。

您必须重新设计您的比例以匹配您要使用的值:i / (n - 1)无法直接产生missingpresent