2015-11-04 97 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