Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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_Svg_D3.js - Fatal编程技术网

Javascript d3刷和设置带有时间刻度的最小刻度线

Javascript d3刷和设置带有时间刻度的最小刻度线,javascript,svg,d3.js,Javascript,Svg,D3.js,已编辑 我试图在“刷”焦点图形的“上下文”时设置最小范围 不用担心设置最小值,我已经成功地实现了一个包含上下文和焦点的多系列图表 问题在于,当画笔足够小时,范围小到可以在动态焦点图表上显示小时数 我的问题是,是否可以设置一个最小刻度线或限制画笔可以减少的数量,以确保刻度不会下降到小时,而是限制到天 下面的代码设置了最小刻度,但不管画笔有多大都会这样做,因此显示的方式也可能是刻度标记(天) 注意:此代码已被编辑和处理过很多次,可能没有完全意义,但我希望实现的要点应该在那里。用户操作时,您不能强制笔

已编辑

我试图在“刷”焦点图形的“上下文”时设置最小范围

不用担心设置最小值,我已经成功地实现了一个包含上下文和焦点的多系列图表

问题在于,当画笔足够小时,范围小到可以在动态焦点图表上显示小时数

我的问题是,是否可以设置一个最小刻度线或限制画笔可以减少的数量,以确保刻度不会下降到小时,而是限制到天

下面的代码设置了最小刻度,但不管画笔有多大都会这样做,因此显示的方式也可能是刻度标记(天)


注意:此代码已被编辑和处理过很多次,可能没有完全意义,但我希望实现的要点应该在那里。

用户操作时,您不能强制笔刷具有一定的最小范围,但您可以在
brushed
功能中添加一个检查,查看范围是否太小,如果是,则将其设置为最小值:

var minExtent = 8640000; 
    //minimum number of milliseconds to display in the focus chart

function brushed() {
        removeFixedLine();
        if ( brush.empty() ) {
            x.domain( x2.domain() ); //reset the domain (Note the typo fix!)
        } else {
            var newData = brush.extent();
            var width = newData[1] - newData[0]; 
                 //this assumes a single-direction brush,
                 //like in the original code

            if (width < minExtent) {
               var padding = ( minExtent - width )/2;
                   //amount to add onto each side of the extent
               newData[0] -= padding;
               newData[1] += padding;

               brush.extent(newData); 
                   //Update the extent value stored in the brush.

               brushGroup.call(brush); 
                   //Redraw the brush rectangles to match the modified extent.
                   //(Replace `brushGroup` with the d3 selection containing the 
                   //<g> element into which you originally drew the brush.)
            }

            x.domain(newData); 
                 //if width was greater than minExtent,
                 //this is just the extent from the brush
        }

        /* redraw the focus chart */

}
var minExtent=8640000;
//焦点图表中显示的最小毫秒数
函数brushed(){
removeFixedLine();
if(brush.empty()){
x、 域(x2.domain());//重置域(注意拼写错误!)
}否则{
var newData=brush.extent();
变量宽度=新数据[1]-新数据[0];
//这假定为单向笔刷,
//就像原始代码一样
如果(宽度
请注意,要应用修改的范围,必须做三件事:

  • 使用设置笔刷对象上的范围

  • 使用or
    selection.call(brush)
    (完全相同,只是以不同的方式编写)重新绘制画笔的SVG表示形式

  • 如通常一样,使用修改后的范围来设置焦点图表x比例域


设置每月最低限额:

var xAxis = d3.axisBottom(xScale).ticks(d3.timeMonth);
要设置每日最低限额,请执行以下操作:

var xAxis = d3.axisBottom(xScale).ticks(d3.timeDay);

我不知道你所说的“最小范围”是什么意思。您的代码似乎只设置了记号?所以实际上,我需要的是记号标记,而不是最小边界为一天的范围。我将重新表述这个问题。这是
xAxis.ticks(d3.time.days,1)
有,没有?但它似乎一直都在这样做,而且刷子在超过一天的时间内不会恢复到正常的动态滴答更新。听起来你想要自己的,以天作为最小边界。抱歉,尽管这可能会起作用(这给了我一个错误)我想我实际上需要勾号至少有一天,但是要由画笔动态设置。目的是如果画笔宽度大于最小值,它就会按原样使用。我会纠正我看到的一个输入错误,如果这不能修复错误,请让我确切地知道您遇到了什么错误,以及哪行代码触发了错误。
var xAxis = d3.axisBottom(xScale).ticks(d3.timeDay);