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
(完全相同,只是以不同的方式编写)重新绘制画笔的SVG表示形式selection.call(brush)
- 如通常一样,使用修改后的范围来设置焦点图表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);