我真的很喜欢this graph及其功能,它非常适合我想要/需要的东西。我唯一需要更改的是我需要它以允许在y轴上显示序数数据,但我似乎无法使其正常工作(我是初学者)。
当我将y比例从线性更改为序数时:yscale[k] = d3.scale.linear() .domain(d3.extent(data, function(d) { return +d[k]; })) .range([h, 0]));
至
yscale[k] = d3.scale.ordinal().rangePoints([h, 0]),
yscale[k].domain(data.map(function(d) { return d[k]; })))
笔刷仍然显示并且可以单独工作,但是它不会过滤掉选定的线条。除非我将其移动到轴的最顶部,否则不会显示任何线,所有或几乎所有线都将显示。当我使用Firebug单步执行代码时,看起来好像只是没有获得画笔区域中的行,而是all(?)...,而且我似乎无法弄清楚。 :(
如果有人可以为此提供帮助(尤其是我必须更改的所有地方以及更改方式),我将很乐意让它工作并了解我做错了什么:-\
最佳答案
刷序数轴将返回像素,而刷定量轴将返回域。
https://github.com/mbostock/d3/wiki/SVG-Controls#wiki-brush_x
我的猜测是,您需要向后工作并将像素转换为域值。我发现了这个问题,因为我正在尝试做同样的事情。如果我弄清楚了,我会告诉你。
编辑:这是一个很棒的示例,可以帮助您入门。
http://philau.willbowman.com/2012/digitalInnovation/DevelopmentReferences/LIBS/d3JS/examples/brush/brush-ordinal.html
function brushmove() {
var s = d3.event.target.extent();
symbol.classed("selected", function(d) { return s[0] <= (d = x(d)) && d <= s[1]; });
}
他捕获选择范围(以像素为单位),然后选择所有系列元素并确定它们是否在范围内。您可以基于此过滤元素,并返回数据键或要添加到过滤器中的内容。