2015-11-04 37 views
1

我是新来的d3,我尝试做一个堆积/分组直方图。d3 - 调用函数后颜色改变

我定义一个全局颜色定义是这样的:

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

我用它来填充rects在我的柱状图(5个rects 2可变= 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

看一看的documentation for ordinal scales

鉴于该输入域中的值x,返回输出范围对应的值。

如果范围被明确指定,并且给定值x是 不在比例域中,则x隐式添加到域中;

通过调用​​,您隐式地将0和1作为值添加到域中。

你必须返工的规模以适应所要使用的值:i/(n - 1)不能直接产生missingpresent

+0

MMH确定..谢谢! – Monica