D3.js d3-调用函数后颜色发生变化
我是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
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)
不能直接产生缺失的和存在的