2017-01-02 85 views
0

在这fiddle如何更改笔画的颜色?如何定义笔画的颜色

我尝试这样的代码,但它不会改变颜色:

var colors = ["#F0E5FF","#E1CCFF","#C499FF","#AC79F2","#8D4CE5","#6100E5","#C94D8C"]; 

var colorScaleDomain = [100, 300, 1000, 10000, 50000, 600000]; 

var colorScale = d3.scale.threshold() 
    .domain(colorScaleDomain) 
    .range(colors); 

link.style("stroke", function(d){ 
    return colorScale(d[0].size) 
}); 

什么是错在我的代码?

+0

小提琴与您的代码:https://jsfiddle.net/mkaran/om8tqotp/与稍微不同的色彩比例域和变体使用d3.scale.ordinal()https://jsfiddle.net/mkaran/6qvjep7r /。我认为你所给的色阶域太宽,所以d [0] .size属于一个类别,因此它只给出一种颜色。尝试更好地调整域,例如:[300,500,1000,1300,1800,2000,5000,10000,13000,18000,20000] https://jsfiddle.net/mkaran/gLvnm0pf/ – mkaran

+0

@mkaran:是的,这是因为我的真实数据集要大得多。你能发表一个答案吗? – Dinosaurius

+0

@mkaran:我稍微误会了一件事。如果'var color = [“#9EDAE5”,“#6100E5”,“#C94D8C”];'var colorScaleDomain = [300,1000,20000]',那么所有大小小于300的条目将有颜色'#9EDAE5',对吧? – Dinosaurius

回答

3

所以,问题在于如何选择colorScaleDomain关于您的数据“大小”属性。现在的方式是,许多价值属于一个类别,因此选择一种颜色。我会尽力提供一个通用的解决方案,而不是一个硬编码的规模: https://jsfiddle.net/mkaran/3adu1u2n/ ,其中colorScaleDomain通过创建多达等于箱为你的颜色规模

var colors = ["#F0E5FF","#E1CCFF","#C499FF","#AC79F2","#8D4CE5","#6100E5","#C94D8C"]; 
var maxSize = d3.max(classes, function(d) { return +d.size;}); 
var colorScaleDomain = []; 
var bin = Math.round(maxSize/colors.length); 
for(let i=0; i < colors.length; i++){ 
    colorScaleDomain.push(bin*i) 
} 
console.log(colorScaleDomain) 
var colorScale = d3.scale.threshold() 
    .domain(colorScaleDomain) 
    .range(colors); 

例如长度计算:[0, 3513, 7026, 10539, 14052, 17565, 21078]

如果您想对颜色进行不同的分组,您可以尝试使用与大小不同的变量。例如。 d.imports.length,它们将以不同方式对它们进行分组(https://jsfiddle.net/mkaran/snec9kgf/)等。

+0

也许这会让它更清晰https://github.com/d3/d3-3 .x-api-reference/blob/master/Quantitative-Scales.md#threshold'默认阈值标度等同于数字的舍入函数;例如,阈值(0.49)返回0,并且阈值(0.51)返回1.因此,类似地,1830落在1800-2000的范围内,其又被编码为“#000000”。 – mkaran

+0

调用的函数如下:scale(x)if(x <= x)返回范围[d3.bisect(domain,x)]; }',如果情况是colors.lenght大于colorScaleDomain,那么值如12000,15000等将返回'undefined'。看看控制台:https://jsfiddle.net/mkaran/2oq1hLys/ – mkaran

+0

https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md# threshold_domain'如果标度范围内的值的数量为N + 1,则标度域中的值的数量必须为N.如果域中少于N个元素,则范围内的附加值将被忽略。如果域中有多于N个元素,则某些输入可能会返回未定义的比例 – mkaran