Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在d3.js中进行缩放_Javascript_D3.js - Fatal编程技术网

Javascript 如何在d3.js中进行缩放

Javascript 如何在d3.js中进行缩放,javascript,d3.js,Javascript,D3.js,我想将一些输入值缩放到一些输出范围 输入或域10,20,40,30---总计100 输出范围不应低于16。。所有输入的输出之和应为214 myScale---d3线性刻度 var myScale = d3.scale.linear().domain([0, 100]).range([16,214]); out1=myScale(10) out2=myScale(20) out3=myScale(40) out4=myScale(30) 我希望out1+out2+out3+out4应该始终等于

我想将一些输入值缩放到一些输出范围

输入或域10,20,40,30---总计100

输出范围不应低于16。。所有输入的输出之和应为214

myScale---d3线性刻度

var myScale = d3.scale.linear().domain([0, 100]).range([16,214]);

out1=myScale(10)
out2=myScale(20)
out3=myScale(40)
out4=myScale(30)
我希望out1+out2+out3+out4应该始终等于214,所有OUT的最小值为16或更大


请让我知道如何在代码中写入刻度,域以0开头,范围以16开头

这将在使用“比例”时为每个输入生成偏移

当您添加out1 out2 out3 out4时。偏移量增加4倍。所以这不是你想要的

例如
myScale(0+0+0+0)!=myScale(0)+myScale(0)+myScale(0)+myScale(0)

我们可以标准化缩放范围并保存偏移量

var begin = 16,
    end = 214,
    range = end - begin;

var myScale = d3.scale.linear().domain([0, 100]).range([0,range]);

out1=myScale(10)
out2=myScale(20)
out3=myScale(40)
out4=myScale(30)

// maybe it is 214.000000000000003, float is not 100% accurate
console.log(begin + out1 + out2 + out3 + out4); 
演示:

要使此解决方案起作用,您应该记住为每个刻度添加开始,以达到您的目标


目的地

因为最小值是16,正如邱德清所提到的,它被添加的次数与输入的次数一样多,我们应该确保它只被添加一次

var minValue = 16,
    totalSum = 214,
    numberOfInputs = 4;

var maxValue = totalSum - ((numberOfInputs - 1)*minValue);

var myScale = d3.scale.linear().domain([0, 100]).range([minValue,maxValue]);

我想要的是out1+out2+out3+out4=214…限制是缩放后的输出应始终大于14。我没有得到我想要的。检查小提琴