倒数与序数规模

Pri*_*iya 21 d3.js

有没有办法找到序数尺度的倒置?

我在x轴上使用字符串值,这是使用序数比例而我在鼠标移动时我想找到x轴的反转以找到鼠标位置的哪个字符串?

有没有办法找到这个?

var barLabels = dataset.map(function(datum) {
    return datum.image;
});
console.log(barLabels);
var imageScale = d3.scale.ordinal()
        .domain(barLabels)
        .rangeRoundBands([0, w], 0.1);
// divides bands equally among total width, with 10% spacing.
console.log("imageScale....................");
console.log(imageScale.domain());

 .
 .
var xPos = d3.mouse(this)[0];
xScale.invert(xPos);
Run Code Online (Sandbox Code Playgroud)

Ame*_*aBR 25

我实际上认为没有一个用于序数标度的反转方法是没有意义的,但你可以使用ordinal.range()方法弄清楚它,它将返回每个条形的起始值,以及ordinal.rangeBand()方法的宽度.

示例:http: //fiddle.jshell.net/dMpbh/2/

相关代码是

    .on("click", function(d,i) {
        var xPos = d3.mouse(this)[0];
        console.log("Clicked at " + xPos);
        //console.log(imageScale.invert(xPos));
        var leftEdges = imageScale.range();
        var width = imageScale.rangeBand();
        var j;
        for(j=0; xPos > (leftEdges[j] + width); j++) {}
            //do nothing, just increment j until case fails
        console.log("Clicked on " + imageScale.domain()[j]);
    });
Run Code Online (Sandbox Code Playgroud)

  • @AmeliaBR FYI - 看起来迈克已经被问到这个问题了.这是他的反应:https://github.com/d3/d3/issues/3022#event-857320381 (2认同)

sep*_*ans 18

我发现了一个更短的实施此处其工作完全拒绝拉请求.

var ypos = domain[d3.bisect(range, xpos) - 1];
Run Code Online (Sandbox Code Playgroud)

其中domain和range是scale domain和range:

var domain = x.domain(),
    range = x.range();
Run Code Online (Sandbox Code Playgroud)