如何在具有缩放功能的时间轴中的 d3 v4 中添加过滤器或 ScaleExtent

How to add the filter or ScaleExtent in d3 v4 in Timeline with Zoom functionality

我正在处理 d3 版本 4 中的时间轴。所以我创建了一个 SVG 并添加了 axiszoom 在该 SVG 上如下所示。

var timeLineSVG = d3.select("body")
                .append("svg")
                .attr("width", 300)
                .attr("height", 300);
var xScale = d3.scaleTime()
            .domain([Date.parse("April 1, 2017"), Date.parse("April 30, 2017")])
            .range([0, 300]);

var xAxis = d3.axisTop(xScale);

var timeLineZoom = d3.zoom(xScale)
                    .on("zoom", onTimeLineZoom);

var timeLineGraphics = timeLineSVG.append("g")
                                .attr("transform", "translate(0,40)")
                                .call(xAxis);
timeLineSVG.call(timeLineZoom);

function onTimeLineZoom(event) {
    var tempScale = d3.event.transform.rescaleX(xScale);
    timeLineGraphics.call(xAxis.scale(tempScale));
}

规模的范围将根据数据发生变化。所以我想 只允许缩放到天级别而不超过天级别

这里是small example what I have done.

我们可以在缩放实例上使用 scaleextent 属性 但值是多少以及我们如何在不进行硬编码的情况下进行计算。

你可以用scaleExtend([minScaleFactor, maxScaleFactor])来控制它。 示例:d3.zoom().scaleExtend([0.5, 10])