我有这些类别:
var IMCcat = [
{color:'#F43E3E',min:40,max:200,name:'obésité morbide ou massive'},
{color:'#F4B4B4',min:35,max:40,name:'obésité sévère'},
{color:'#FAE9CA',min:30,max:35,name:'obésité modérée'},
{color:'#FFFFD4',min:25,max:30,name:'surpoids'},
{color:'#E9FFDA',min:18.5,max:25,name:'corpulence normale'},
{color:'#FFFFD4',min:16.5,max:18.5,name:'maigreur'},
{color:'#F43E3E',min:0,max:16.5,name:'famine'}
];
(这些是体重指数(BMI),但以法语(IMC))
如您所见,我的域从0到200,但是不同的类别具有不同的宽度。
我想用d3定义一个比例,域将是BMI,范围是颜色。颜色是离散值,但域是连续的。
我需要提供体重秤,并获取相对颜色。如果提供了重量,我得到包含颜色和名称的对象(以及最小和最大,但没用),那会更好。
如果您想尝试,这里是BMI功能:
function BMI(weight) {
return weight / (height * height);
}
当范围重叠时,如何设置排除或包含最小值,而最大值却相反?
谢谢
可以给体重秤BMI而不是体重。我将把比例尺包装在执行转换的函数中。
使用阈值量表:
//reverse array so BMI is ascending
IMCcat = IMCcat.reverse();
//create scale
var scale = d3.scale.threshold()
//set the domain equal to the min weights, w/ lowest removed
.domain(IMCcat.map(function(d){ return d.min; }).slice(1))
//set the range equal to the colors
.range(IMCcat.map(function(d){ return d.color; }))
比例尺将BMI转换为颜色:
> scale(40)
"#F43E3E"
> scale(30)
"#FAE9CA"
要创建刻度,将BMI转换为带有颜色和名称的对象,只需更改刻度范围即可:
> scale.range(IMCcat)
> scale(20)
Object {color: "#E9FFDA", min: 18.5, max: 25, name: "corpulence normale"}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句