d3中的自定义比例

时间:2015-12-07 19:56:15

标签: d3.js

d3中有许多缩放函数(例如:d3.scale.linear(),d3.scale.sqrt(),d3.scale.log(),...)。但是对于特定情况,我需要一个不同的比例函数(准确地说是“generalised logistic function”)。有没有办法在d3中定义自定义比例功能?像

function d3.scale.mycustom() {
       ...
}

从数学的角度来看这很容易,但我如何在d3中实现呢?

在Enche的暗示下,我尝试了以下内容:

var my_custom_scale = function interpolate(t) {

    var A  = 0;
    var K  = 1;
    var B  = 10;
    var NU = 0.7;
    var Q  = 0.5;
    var C  = 1;

    return A + (K - A) / Math.pow(C + Q * Math.exp(-1 * B * (t - 0.5)), 1 / NU);

}

哪个有效:

console.log(my_custom_scale(0.0)); // 0.0021
console.log(my_custom_scale(0.1)); // 0.0084
console.log(my_custom_scale(0.2)); // 0.0324
console.log(my_custom_scale(0.3)); // 0.1098
console.log(my_custom_scale(0.4)); // 0.2934
console.log(my_custom_scale(0.5)); // 0.5603
console.log(my_custom_scale(0.6)); // 0.7857
console.log(my_custom_scale(0.7)); // 0.9107
console.log(my_custom_scale(0.8)); // 0.9655
console.log(my_custom_scale(0.9)); // 0.9871
console.log(my_custom_scale(1.0)); // 0.9952

但我现在如何将其作为d3.scale.my_custom_scale提供?

1 个答案:

答案 0 :(得分:0)

维基百科的文章对我来说有点压倒性地编写实际代码,但是:

  

有没有办法在d3中定义自定义比例功能?

烨!见here。您可能需要/需要使用interpolator,您会经常在量化比例页面上看到它。