有没有办法找到序数尺度的倒置?
我在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)
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)