Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3时间轴的限制缩放级别_Javascript_D3.js_Visualization - Fatal编程技术网

Javascript d3时间轴的限制缩放级别

Javascript d3时间轴的限制缩放级别,javascript,d3.js,visualization,Javascript,D3.js,Visualization,下面是我在时间X轴上缩放的代码。我想在放大或缩小时间之间设置一个限制,即时间的上限和下限。 我试着在这个线程中建议的缩放函数中加入边界值。但它不起作用。 var x=d3.time .比例尺() .domain([开始日期,结束日期]) .范围([0,宽度]); var zoom=d3.0 .zoom() .x(x) 。打开(“缩放”,缩放); svg=d3 .选择(“#图表”+k) .append(“svg:svg”) .attr(“宽度”,宽度+边距。左侧+边距。右侧) .attr(“高度”

下面是我在时间X轴上缩放的代码。我想在放大或缩小时间之间设置一个限制,即时间的上限和下限。 我试着在这个线程中建议的缩放函数中加入边界值。但它不起作用。
var x=d3.time
.比例尺()
.domain([开始日期,结束日期])
.范围([0,宽度]);
var zoom=d3.0
.zoom()
.x(x)
。打开(“缩放”,缩放);
svg=d3
.选择(“#图表”+k)
.append(“svg:svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.append(“svg:g”)
.attr(“转换”、“平移”(“+margin.left+”,“+margin.top+”)
.呼叫(缩放);
函数缩放(){
svg.selectAll(“.line”).remove();
makeBackground();
svg.select(“.x.axis”).call(xAxis);
d3.选择(“.x.axis.top”).调用(xAxisTop);
选择(“.x.grid”)。调用(
make_x_轴()
.tickSize(-height,0,0)
.tick格式(“”)
);
svg.selectAll(“.circle path”).remove();
d3.选择全部(“.trainTag”).remove();
绘图路径();
绘图圈(x、y、图表体、列车数据[0]);
}
在d3 v4中,d3.zoom().scaleExtent允许限制用户在超出给定边界时进行缩放(但可以通过编程方式将其设置为超出给定边界)。这些是作为因素给出的,而不是作为时间范围给出的。但是,您可以使用已知的量表开始和结束时间,自行计算系数:

const minTimeMilli = 20000; // do not allow zooming beyond displaying 20 seconds
const maxTimeMilli = 6.3072e+11; // approx 20 years

const widthMilli = endTime - startTime;

const minScaleFactor = widthMilli / maxTimeMilli;
const maxScaleFactor = widthMilli / minTimeMilli;

const zoom = d3.zoom()
  .scaleExtent([minScaleFactor, maxScaleFactor])