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

D3.js d3-调用函数后颜色发生变化,d3.js,D3.js,我是d3新手,我尝试制作一个堆叠/分组直方图 我定义的全局颜色定义如下: var c_gender = d3.scale.ordinal() .domain(["missing", "present"]) .range(["#54278f", "#DADAEB"]); var dataset = [ [ { x: 0, y: missing_age_array.length }, { x: 1, y: missing_gender_arr

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

我定义的全局颜色定义如下:

var c_gender = d3.scale.ordinal()
    .domain(["missing", "present"])
    .range(["#54278f", "#DADAEB"]);
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());
...
我用它来填充直方图中的矩形(5个矩形代表2个变量=10个矩形,如果分组,5个堆叠)。所有的作品都很好,但我注意到颜色的领域已经改变了。我在其他图表中使用此颜色定义,因此域不正确。 使用颜色修改我的矩形样式后,颜色域中会添加更多值,如下所示:

var c_gender = d3.scale.ordinal()
    .domain(["missing", "present"])
    .range(["#54278f", "#DADAEB"]);
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]
我不确定这个解释是否清楚。。但是有人能帮我理解为什么调用函数后颜色域会发生变化吗

蒂亚 -莫妮卡

看看:

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

如果明确指定了范围[…],且给定值x为 不在标尺的域中,则x隐式添加到域中

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

你必须重新调整你的刻度以匹配你想要使用的值:
i/(n-1)
不能直接产生
缺失的
存在的