时间比例尺

优质
小牛编辑
140浏览
2023-12-01

D3的Time scale是d3.scale.linear比例尺的扩展,使用Javascript的Date对象作为其输入域(domain)。因此,不同于普通的线性比例尺(linear scale),domain的值会被强制转为时间类型而非数字类型;同样的,invert函数返回的是一个时间类型。最方便的是,time scale同样提供了基于time intervals的合适的打点器,解除了为任何基于时间的域生成轴的痛苦。
d3.time.scale返回的是一个比例尺对象,同时也是一个函数。你可以像任何函数一样引用它,同时它有额外的方法可以改变它的行为。如D3的其它类一样,scale对象也可以链式调用方法,setter方法返回scale对象本身,可以用一个简洁的声明中引用多个setters。

d3.time.scale()

使用默认的域和范围来构建一个新的时间比例尺;默认以本地时间配置ticks和tick format。

d3.time.scale.utc()

使用默认的域和范围来构建一个新的时间比例尺;默认以UTC时间配置ticks和tick format。

scale(x)

给定输入域内的时间x,返回相应输出范围的值;

scale.invert(y)

对输出范围y内的值,返回相应的输入域x内的时间对象。这个用于从rang到domain的反向映射。对于输出域range内的y值,scale(scale.invert(y))==y;同样,对于输入域domain内的时间对象x,scale.invert(scale(x))==x。这种反向操作符在交互时非常有用,例如,鼠标移动时,计算出鼠标当前位置相对应的输入域的时间。

scale.domain([dates])

如果设置了参数dates ,则把scale的输入域domain设置为dates数组,该数组必须包含两个及以上的时间对象。如果数组里的元素不是时间对象,将被强制转换为时间对象;这个强制转换在比例尺被引用时发生。如果没有设置参数dates,则返回scale的当前的输入域domain。通常来说,时间比例尺虽然在输入域domain里只有两个时间对象,但你可以为polylinear 比例尺设置多于两个的时间对象,这样的话,必须在输出范围中设置相同数量的数值。

scale.nice([interval[, step]])

scale.nice([count])

扩展域使得开始和结束于很好的整数值,当由指定的时间间隔和可选参数阶数step。作为替代方案,指定一个明确的时间间隔,一个数字count 可以被指定,并且在时间间隔将自动被选择为与scale.ticks一致。如果未指定计数count ,则默认为10。
这个方法通常扩展比例尺的域,可能只扩展边界到最接近的整数值。Nicing是有用的,如果域是从数据计算的并可以是不规则的。例如,对于域[2009-07-13T00:02, 2009-07-13T23:48]好域是[2009-07-13, 2009-07-14]。如果域有多于两个值,nicing将只影响域的第一个和最后一个值。

scale.range([values])

如果设置了参数values,则把scale的输出域range设置为values数组,该数组必须包含两及以上的数值,以匹配输入域domain。values数组里的元素不需要一定是数字类型,任何支持下面的interpolator的数据类型都可以。但是,invert操作符需要数字类型的输出域。如果没有设置参数values,则返回scale的当前输出域。

scale.rangeRound([values])

设置scale的输出域range为指定的values数组,同时设置了scale的interpolator为d3.interpolateRound。如果比例尺输出的值应该是整数时,这是一个便捷的方法,可以有效地避免平滑处理工件。也可以在引用比例尺应用之后手动四舍五入输出的值。

scale.interpolate([factory])

如果设置了参数factory,则将scale的输出插值器设置为factory。默认的插值器工厂为d3.interpolate,将标准化的[0,1]范围内的输入域参数t,映射到相应的输出域range内的数值。插值器工厂将为输出范围内的相邻的每对数值构造插值器。

scale.clamp([boolean])

如果设置了参数boolean(布尔值),则相应地开启或者关闭clamping。默认情况下,clamping是关闭的,如果一个超出了输入域的值被传递给了比例尺,则比例尺将通过线性推断,可能会返回一个输出范围之外的数值。以默认的[0,1]输入域和输出域为例,输入数值2将返回输出数值2。如果clamping开启,标准化的输入域参数t会被限定在输出域[0,1]内,这样比例尺返回的值永远都在输出域内。如果boolean没有设置,返回的是比例尺是否限定当前数值到输出范围内。

scale.ticks([interval[, step]])

scale.ticks([count])

返回比例尺输入域的代表性时间。返回的打点tick时间,它们有相同间距(模式不标准的时间间隔,比如月份和闰年)、包含可读性的数值(比如午夜),以及确保在输入域范围之内。刻度常被用在显示参考线、刻度标记,与视觉化的数据一起使用时。
如果参数count是一个数字,将返回大约count数量的刻度。如果未设置参数count,默认设置为10。Count只是一个提示,根据输入域domain,比例尺可能会返回更多或更少的数值。
如果设置了参数时间间隔 interval ,那么将会引用time interval的range function 函数,同时传递可选参数step,以生成刻度。
比如,生成默认的10个刻度
scale.ticks(10);
或者,以15分钟为间隔生成ticks:
scale.ticks(d3.time.minute, 15);
注意:对于UTC 比例尺,使用相应的UTC输出范围方法(比如,d3.time.minute.utc)。:
以下时间间隔被视为自动ticks:
1-, 5-, 15- 和 30-秒.
1-, 5-, 15- 和 30-分.
1-, 3-, 6- 和 12-小时.
1- 和 2-天.
1-星期.
1- 和 3-月.
1-年.
这一组时间间隔是稍微有点随意的,并且额外的值也会在未来会被加上。

scale.tickFormat(count)

返回一个可以显示刻度值的世时间格式化函数。参数count应该和用于生成刻度值的数量一致。你不用必须使用比例尺内建的刻度格式,但它会根据输入域的时间自动计算相应的结果。
比如以下时间格式:
%Y – 年分界,如"2011".
%B – 月分界,如"February".
%b %d – 星期分界,如"Feb 06".
%a %d – 日期分界,如"Mon 07".
%I %p – 小时分界,如"01 AM".
%I:%M – 分钟分界,如"01:23".
:%S – 秒分界,如":45".
.%L – 毫秒分界,如".012".
使用多重时间格式,默认的时间格式为每个时间间隔提供局部和全局环境。例如,为显示[11 PM, Mon 07, 01 AM],刻度格式器可以同时展现小时和日期信息--而非只有小时。如果你喜欢用单一的时间格式器,你可以一直使用你自己定义的 d3.time.format。

scale.copy()

返回当前time scale的完整副本。所有对当前世家比例尺的改变都不会改变返回的副本,反之亦然。