d3-scale
比例尺对于可视化的基本任务来说是一个便利的抽象:将抽象数据的一个维度映射到可视化表示中。虽然大多数情况下用于位置编码定量数据,例如将以米为单位的测量值映射为散点图中点的像素位置,但比例尺可以表示几乎任何可视化编码,例如发散的颜色,描边的宽度或符号的大小。比例尺还可以用于几乎任何类型的数据,例如具名分类数据或需要合理中断的离散数据。
对于连续的定量数据,你通常需要linear scale(线性比例尺)(对于时间序列数据,则为time scale(时间比例尺))。如果其需要分布,则可以考虑使用power scale(幂比例尺)和log scale(对数比例尺)转换数据。quantize scale(量化比例尺)可以通过将连续的数据舍入到一组固定的离散数据来帮助分化;类似的,quantile scale(分位数比例尺)可以计算来自样本群体的分位数,而threshold scale(阈值比例尺)则允许你在连续数据中指定任意的断点。
对于离散序数(有序的)或分类(无序的)数据,ordinal scale(序数比例尺)指定从一组数据值到相应的一组可视属性(如颜色)的显式映射。相关的band scale和point scale(点比例尺)对位置编码序数据有用,例如条形图中的条形或分类散点图中的点。
此库不提供配色方案;另请参阅d3-scale-chromatic查看用于与d3-scale一起使用的配色方案。
比例尺没有内在的视觉表现。但是,大多数比例尺可以为参考表及生成或格式化刻度,以帮助构建坐标轴。
有关更长的介绍,请参阅以下推荐的教程:
Introducing d3-scale by Mike Bostock
Chapter 7. Scales of Interactive Data Visualization for the Web by Scott Murray
d3: scales, and color. by Jérôme Cukier
Installing
如果你使用npm,请键入npm install d3-scale
。否则,请下载最新版本。你也可以直接从d3js.org加载,作为standalone library(独立库)或D3 4.0的一部分来使用。支持AMD,CommonJS和vanilla环境。在vanilla环境下,会输出一个全局的d3
:
<script src="https://d3js.org/d3-array.v1.min.js"></script>
<script src="https://d3js.org/d3-collection.v1.min.js"></script>
<script src="https://d3js.org/d3-color.v1.min.js"></script>
<script src="https://d3js.org/d3-format.v1.min.js"></script>
<script src="https://d3js.org/d3-interpolate.v1.min.js"></script>
<script src="https://d3js.org/d3-time.v1.min.js"></script>
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
<script src="https://d3js.org/d3-scale.v2.min.js"></script>
<script>
var x = d3.scaleLinear();
</script>
API Reference
- Continuous (Linear,Power,Log,Identity,Time)
- Sequential
- Quantize
- Quantile
- Threshold
- Ordinal (Band,Point)
Continuous Scales
连续比例尺将连续的、量化的输入domain映射到一个连续的输出range。如果range也是数值,映射可能会反演。连续比例尺不是直接构建的;相反,请尝试linear,power,log,identity,time或sequential color比例尺。
continuous(value)
给定来自domain的value,返回来自range中相应的值。如果给定的value在domain外,且clamping不可用,则映射可能会外推,即返回的值在range外。例如,应用位置编码:
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x(20); // 80
x(50); // 320
或者应用颜色编码:
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"]);
color(20); // "#9a3439"
color(50); // "#7b5167"
continuous.invert(value)
给定来自range的value,返回来自domain中相应的值。反演对交互很有用,比如确定与鼠标位置相对应的数据值。例如,反演位置编码:
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x.invert(80); // 20
x.invert(320); // 50
如果给定的value在range外,且clamping不可用,则映射可能会外推,即返回的值在domain外。此方法近在range为数值时支持。如果range不是数值,则返回NaN。
对于range中的有效值y,continuous(continuous.invert(y))近似等于y;类似的,对于domain中的有效值x,continuous(continuous.invert(x))近似等于x。由于浮点精度的限制,比例尺及其反演可能不准确。
continuous.domain([domain])
如果指定了domain,则将比例尺的domain设置为给定的数字数组。该数组必须包含两个或更多个元素。如果给定数组中的元素不是数字,它们将被强制转换为数字。如果不指定domain,则返回该比例尺的当前domain的副本。
虽然连续比例尺在其domain和range中通常都有两个值,但指定两个以上的值会产生分段比例尺。例如,要创建一个为负值插入白色和红色以及为正值插入白色和绿色的发散颜色比例尺,,可以这样写:
var color = d3.scaleLinear()
.domain([-1, 0, 1])
.range(["red", "white", "green"]);
color(-0.5); // "rgb(255, 128, 128)"
color(+0.5); // "rgb(128, 192, 128)"
在内部,分段比例尺将对与给定range插值器相对应的给定domain值执行二分法检索。因此domain必须按升序或降序排列。如果domain和range具有不同的长度N和M,则仅观察每个中的第一个min(N,M)元素。
continuous.range([range])
如果指定了range,则将比例尺的domain设置为给定的值数组。该数组必须包含两个或更多个元素。与domain不同的是,给定数组中的元素不一定是数字; 底层插值器支持的任何值都可以使用,但请注意数值型range对于反演是必需的。如果不指定range,则返回比例尺当前range的副本。有关更多示例,另请参阅continuous.interpolate。
continuous.rangeRound([range])
设置比例尺的range为给定的值数组,同时设置比例尺的插值器为interpolateRound。这是一种简便方法,相当于:
continuous
.range(range)
.interpolate(d3.interpolateRound);
舍入插值器有时对于避免抗锯齿伪像是有用的,但也考虑shape-rendering“crispEdges”样式。请注意,此插值器只能用于数字型range。
continuous.clamp(clamp)
如果指定了clamp,则启用或禁用相应的clamping。如果禁用clamping,则当比例尺传入的值在domain外时,返回的值可能通过外推法在range外。如果启用clamping,则比例尺返回的值始终在range中。clamping同样适用于continuous.invert。例如:
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x(-10); // -160, outside range
x.invert(-160); // -10, outside domain
x.clamp(true);
x(-10); // 0, clamped to range
x.invert(-160); // 10, clamped to domain
如果不指定clamp,则返回当前比例尺是否将值限制在range中。
continuous.interpolate(interpolate)
如果指定了interpolate,则设置比例尺的range插值器工厂函数。此插值器工厂函数用于为range中的每对相邻值创建插值器;然后这些插值器将范围在[0, 1]中的domain参数t映射到range中相应的值。如果不指定interpolate,则返回比例尺当前的插值器工厂函数,默认为interpolate。另请参阅d3-interpolate查看更多插值器。
例如,考虑range中有三种颜色的发散颜色比例尺:
var color = d3.scaleLinear()
.domain([-100, 0, +100])
.range(["red", "white", "green"]);
由比例尺内部创建的两个插值器,相当于:
var i0 = d3.interpolate("red", "white"),
i1 = d3.interpolate("white", "green");
指定自定义插值器的常见原因是更改插值的颜色空间。例如,要使用HCL:
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"])
.interpolate(d3.interpolateHcl);
或者对于具有自定义gamma的Cubehelix:
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"])
.interpolate(d3.interpolateCubehelix.gamma(3));
注意:默认插值器可能会重用返回值。例如,如果range值是对象,则值插值器始终返回相同的对象,并就地进行修改。如果使用比例尺来设置属性或样式,这通常是可以接受的(并且对于性能而言是可取的);但是,如果你需要存储比例尺的返回值,则必须指定自己的插值器或根据需要制作副本。
continuous.ticks([count])
返回来自比例尺domain的大约count个表现值。如果不指定count,则默认为10。返回的刻度值间隔均匀,具有人类可读的值(例如,10的幂的倍数),并且保证在domain内。可读通常用于展示参考线,或可读标记,以及可视化数据。给定的count只是一个提示;比例尺可能返回更多或更少的值,具体取决于domain。另请参阅d3-array的ticks。
continuous.tickFormat([count[, specifier]])
返回一个适合展示刻度值的数字格式函数,根据刻度值之间的固定间隔自动计算适当的精度。给定的count应该和用于生成刻度值的count一致。
可选的specifier允许自定义格式,其精度由比例尺根据刻度间隔自动设置。例如,格式化百分比变化,你可以这样写:
var x = d3.scaleLinear()
.domain([-1, 1])
.range([0, 960]);
var ticks = x.ticks(5),
tickFormat = x.tickFormat(5, "+%");
ticks.map(tickFormat); // ["-100%", "-50%", "+0%", "+50%", "+100%"]
如果specifier使用格式类型s
,则比例尺将返回基于domain中的最大值的SI前缀格式。如果specifier已经指定了精度,此方法相当于local.format。
continuous.nice([count])
扩展domain,使其以一个舍入良好的值开始,并以一个舍入良好的值结束。此方法通常会修改比例尺的domain,并且只会将边界扩展到最近舍入的值。可选的刻度count参数允许更好地控制用于扩展边界的步长,从而保证返回的刻度精确地覆盖domain。如果domain由数据计算而来,例如使用extent,并且可能不规则,则nice非常有用。例如,对于domain[0.201479 ...,0.996679 ...],一个很好的domain可能是[0.2,1.0]。如果该domain有两个以上的值,则nicing仅影响第一个和最后一个值。另请参阅d3-array的tickStep。
nicing比例尺只会修改当前的domain;它不会自动nice后续使用continuous.domain设置的domain。如果需要,你必须在设置新的domain后重新nice比例尺。
continuous.copy()
返回此比例尺的一个精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。
Linear Scales
d3.scaleLinear()
用单元domain[0, 1]、单元range[0, 1]和默认插值器构建一个新的连续比例尺,禁用clamping。线性比例尺是连续定量数据的良好默认选择,因为它们保留了比例差异。每个range值y可以表示为domain值x的函数:y = mx + b。
Power Scales
幂比例尺与线性比例尺相似,只是在计算输出range值之前将对输入domain值应用指数转换。每个range值y可以表示为domain值x的函数:y = mx^k + b,其中k是指数值。幂比例尺还支持负domain值,在这种情况下,输入值和结果输出值将乘以-1。
d3.scalePow()
用单元domain[0, 1]、单元range[0, 1]、默认插值器和指数1构建一个新的连续比例尺,禁用clamping。(请注意,除非你设置不同的指数,否则这实际上是一个线性比例尺。)
pow(value)
请参阅continuous。
pow.invert(value)
pow.exponent([exponent])
如果指定了exponent,则设置当前的指数为给定的数字值。如果不指定exponent,则返回当前的指数,默认为1。(请注意,除非你设置不同的指数,否则这实际上是一个线性比例尺。)
pow.domain([domain])
pow.range([range])
请参阅continuous.range。
pow.rangeRound([range])
pow.clamp(clamp)
请参阅continuous.clamp。
pow.interpolate(interpolate)
pow.ticks([count])
请参阅continuous.ticks。
pow.tickFormat([count[, specifier]])
pow.nice([count])
请参阅continuous.nice。
pow.copy()
请参阅continuous.copy。
d3.scaleSqrt()
用单元domain[0, 1]、单元range[0, 1]、默认插值器和指数0.5构建一个新的连续比例尺,禁用clamping。这是d3.scalePow().exponent(0.5)
的简便方法。
Log Scales
对数比例尺类似于线性比例尺,除了在计算输出range值之前将对输入domain值应用对数转换。映射到range值的y可以表示为domain值x的函数:y = mlog(x) + b。
由于log(0) = -∞,对数比例尺domain必须严格为正或严格为负;该domain不得包含或穿过0。具有正domain的对数比例尺对正值具有定义良好的行为,具有负domain的对数比例尺对负值具有定义良好的行为。(对于负domain,输入和输出值隐式乘以-1)。如果将负值传递给具有正domain的对数比例尺,则刻度的行为不确定,反之亦然。
d3.scaleLog()
用单元domain[0, 1]、单元range[0, 1]、默认插值器和底为10构建一个新的连续比例尺,禁用clamping。
log(value)
请参阅continuous。
log.invert(value)
log.base([base])
如果指定了base,则设置对数比例尺的底为给定值。如果不指定base,则返回当前的底,默认为10。
log.domain([domain])
log.range([range])
请参阅continuous.range。
log.rangeRound([range])
log.clamp(clamp)
请参阅continuous.clamp。
log.interpolate(interpolate)
log.ticks([count])
和continuous.ticks类似,但是为对数比例尺定制的。如果底为整数,则返回的刻度在每个底的整数幂中均匀分布;否则底的每个幂返回一个刻度。返回的刻度保证在domain的范围内。如果domain中的数量级顺序大于count中的,则最多一个幂返回一个刻度。刻度值未经过滤,但请注意,你可以使用log.tickFormat来过滤刻度标签的显示。如果不指定count,默认为10。
log.tickFormat([count[, specifier]])
和continuous.tickFormat类似,但是为对数比例尺定制的。给定的count通常同用于生成刻度值的count值相同。如果刻度太多,则formmatter可能对有些刻度标签返回空字符串;但是,请注意,刻度依然会显示。例如,要获得一个显示20个货币刻度的刻度formatter,可以这样写log.tickFormat(20, "$,f")
。如果标识符没有定义精度,则精度将由比例尺自动设置,返回合适的格式。这提供了一种指定格式的简便方法,其精度将由比例尺自动设置。
log.nice()
和continuous.nice类似,除了将domain扩展为了底的整数幂。例如,对于[0.201479…, 0.996679…]、底为10的domain,则nice domain为[0.1, 1]。如果domain的值多于两个,则nicing只会影响第一个和最后一个值。
log.copy()
请参阅continuous.copy。
Identity Scales
恒等比例尺是线性比例尺的特例,其domain和range恒等;因此尺度及其反演方法是恒等函数。当使用像素坐标时,这些比例尺偶尔会很有用,比如与axis或brush结合使用。恒等比例尺不支持rangeRound,clamp或interpolate。
d3.scaleIdentity()
用单元domain[0, 1]和单元range[0, 1]构建一个新的恒等比例尺。
Time Scales
时间比例尺是具有时间domain的线性比例尺的变体:domain值强制转换为日期而不是数字,反演同样返回日期。时间比例尺根据日历时间间隔实现刻度,从时间domain生成的轴中消除pain。
例如,要创建位置编码:
var x = d3.scaleTime()
.domain([new Date(2000, 0, 1), new Date(2000, 0, 2)])
.range([0, 960]);
x(new Date(2000, 0, 1, 5)); // 200
x(new Date(2000, 0, 1, 16)); // 640
x.invert(200); // Sat Jan 01 2000 05:00:00 GMT-0800 (PST)
x.invert(640); // Sat Jan 01 2000 16:00:00 GMT-0800 (PST)
对于range中的有效值y,time(time.invert(y))等于y;同样,对于domain中的有效值x,time.invert(time(x)) 等于x。反演方法对于交互非常有用,比如确定与鼠标下像素位置相对应的domain中的值。
d3.scaleTime()
用单元domain[2000-01-01, 2000-01-02]、单元range[0, 1]和默认插值器构建一个新的时间比例尺,禁用clamping。
time(value)
请参阅continuous。
time.invert(value)
time.domain([domain])
time.range([range])
请参阅continuous.range。
time.rangeRound([range])
time.clamp(clamp)
请参阅continuous.clamp。
time.interpolate(interpolate)
time.ticks([count])
time.ticks([interval])
从比例尺的domain中返回代表日期。返回的刻度值是均匀间隔的(大部分),具有合理的值(例如每天午夜),并且保证位于domain的范围内。刻度通常用于显示参考线或刻度标记,以及可视化数据。
可以指定可选的count以影响生成多少刻度。如果不指定count,则默认为10。指定的count仅为提示; 比例尺可能会返回更多或更少的值,具体取决于domain。例如,要创建十个默认刻度,可以这样写:
var x = d3.scaleTime();
x.ticks(10);
// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 03:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 06:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 09:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 12:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 15:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 18:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 21:00:00 GMT-0800 (PST),
// Sun Jan 02 2000 00:00:00 GMT-0800 (PST)]
下列时间间隔用于自动刻度:
- 1-, 5-, 15- 和 30-秒。
- 1-, 5-, 15- 和 30-分钟。
- 1-, 3-, 6- 和 12-小时。
- 1- 和 2-天。
- 1-星期。
- 1- 和 3-月。
- 1-年。
可以显式地指定一个时间interval以替换count。要将减少给定时间interval生成的刻度,请使用interval.every。例如,要以15 分钟的间隔生成刻度:
var x = d3.scaleTime()
.domain([new Date(2000, 0, 1, 0), new Date(2000, 0, 1, 2)]);
x.ticks(d3.timeMinute.every(15));
// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 00:15:00 GMT-0800 (PST),
// Sat Jan 01 2000 00:30:00 GMT-0800 (PST),
// Sat Jan 01 2000 00:45:00 GMT-0800 (PST),
// Sat Jan 01 2000 01:00:00 GMT-0800 (PST),
// Sat Jan 01 2000 01:15:00 GMT-0800 (PST),
// Sat Jan 01 2000 01:30:00 GMT-0800 (PST),
// Sat Jan 01 2000 01:45:00 GMT-0800 (PST),
// Sat Jan 01 2000 02:00:00 GMT-0800 (PST)]
或者,将测试函数传递给interval.filter:
x.ticks(d3.timeMinute.filter(function(d) {
return d.getMinutes() % 15 === 0;
}));
注意:在某些情况下,例如使用天标记,指定一个step能会导致刻度间隔不规则,因为时间间隔长短不一。
time.tickFormat([count[, specifier]])
time.tickFormat([interval[, specifier]])
返回适合显示刻度值的时间格式函数。指定的count或interval目前会被忽略,但为了与其他比例尺如continuous.tickFormat保持一致而被接受。如果指定了specifier,则此方法与format相同。如果不指定specifier,则返回默认的时间格式。默认多比例尺时间格式根据指定的日期选择一个人类可读的表示,如下所示:
%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]以同时显示有关小时、日期和天的信息,而不是格式化一系列刻度[11 PM, 12 AM, 01 AM]只显示小时。如果你想推出自己的条件时间格式,请参阅d3-time- format。
time.nice([count])
time.nice([interval[, step]])
扩展domain,使其都以舍入良好的值开始和结束。此方法通常会修改比例尺的domain,并且可能只会将边界扩展到最近的舍入值。有关更多信息,请参阅continuous.nice。
可选的刻度count参数允许更好地控制用于扩展边界的步长,从而保证返回的刻度精确地覆盖该domain。或者,可以指定时间interval来明确设置刻度。如果指定了interval,则还可以指定一个可选step来跳过一些刻度。例如,time.nice(d3.timeSecond, 10)
将domain扩展到每10秒(0,10,20 等)。请参阅time .ticks和interval .every以获取更多详细信息。
如果domain是根据数据进行计算的,例如使用extent,并且可能不规则,则Nicing很有用。例如,对于domain[2009-07-13T00:02,2009-07-13T23:48],nice domain为[2009-07-13,2009-07-14]。如果该域有两个以上的值,则nicing domain仅影响第一个和最后一个值。
d3.scaleUtc()
相当于time,只是返回的时间以世界协调时间而不是本地时间运行。
Sequential Scales
顺序比例尺类似于连续比例尺,都是将连续的数字输入domain映射到连续的输出range。但是,与连续比例尺不同的是,顺序比例尺的输出range由其插值器固定,不可配置。这些比例尺不会暴露invert,range,rangeRound和interpolate方法。
d3.scaleSequential(interpolator)
使用给定的interpolator函数构建一个新的顺序比例尺。当应用缩放比例尺时,将使用通常在[0,1]范围内的值来调用插值器,其中0代表domain的开始,1代表domain的结束。例如,要实现不明智的HSL彩虹色比例尺:
var rainbow = d3.scaleSequential(function(t) {
return d3.hsl(t * 360, 1, 0.5) + "";
});
更美观且感知有效的循环色调编码是使用d3.interpolateRainbow:
var rainbow = d3.scaleSequential(d3.interpolateRainbow);
sequential(value)
请参阅continuous.
sequential.domain([domain])
请参阅continuous.domain。注意,顺序比例尺的domain必须为数字,且必须包含刚好两个值。
sequential.clamp([clamp])
请参阅continuous.clamp。
sequential.interpolator([interpolator])
如果指定了interpolator,则设置比例尺的插值器为给定的函数。如果不指定interpolator,则返回比例尺当前的插值器。
sequential.copy()
请参阅continuous.copy。
Quantize Scales
量化比例尺与线性比例尺相似,除了它们使用离散而非连续的range。连续输入domain根据输出range中的值(即基数)的数量分成统一的段。每个range值y可以表示为domain值x的量化的线性函数:y = m round(x) + b。另请参阅bl.ocks.org/4060606查看示例。
d3.scaleQuantize()
用单元domain[0, 1]、单元range[0, 1]构建一个新的量化比例尺。因此,默认的量化比例尺相当于Math.round函数。
quantize(value)
给定输入domain中的value,返回输出range中的相应值。例如,要应用颜色编码:
var color = d3.scaleQuantize()
.domain([0, 1])
.range(["brown", "steelblue"]);
color(0.49); // "brown"
color(0.51); // "steelblue"
或者将domain分成三个具有不同range值的大小相等的部分来计算适当的stroke(绘制)宽度:
var width = d3.scaleQuantize()
.domain([10, 100])
.range([1, 2, 4]);
width(20); // 1
width(50); // 2
width(80); // 4
quantize.invertExtent(value)
返回range中相应value对应domain[ x0,x1 ]中值的范围:quantize的反演。这种方法对于交互很有用,比方说确定domain中与鼠标下像素位置相对应的值。
var width = d3.scaleQuantize()
.domain([10, 100])
.range([1, 2, 4]);
width.invertExtent(2); // [40, 70]
quantize.domain([domain])
如果指定了domain,则设置比例尺的domain为给定的仅有两个数字元素的数组。如果给定数组中的元素不是数字,将强制将其转为数字。如果不指定domain,则返回比例尺当前的domain。
quantize.range([range])
如果指定了range,则设置比例尺的range为给定的数值数组。数组可以包含任意数量的离散值。给定数组中的元素不一定是数字;任何值或类型都可以。如果不指定range,则返回比例尺当前的range。
quantize.ticks([count])
相当于continuous.ticks。
quantize.tickFormat([count[, specifier]])
quantize.nice()
相当于continuous.nice。
quantize.copy()
返回此比例尺的精确副本。此比例的变化不会影响返回的比例尺,反之亦然。
Quantile Scales
分位数比例尺将采样的输入domain映射到离散的range中。该domain被认为是连续的,因此比例尺将接受任何合理的输入值;然而,该domain被指定为离散的一组样本值。输出range中的值的数量(基数)决定了将从domain计算的分位数的数量。为了计算分位数,将该domain进行排序,并将其视为离散值的总体;另请参阅d3-array的quantile。另请参阅bl.ocks.org/8ca036b3505121279daf查看示例。
d3.scaleQuantile()
用空domain和空range构造一个新的分位数比例尺。在指定domain和range之前,分位数比例尺无效。
quantile(value)
给定输入domain中的value,返回输出range中的相应值。
quantile.invertExtent(value)
返回与range中的value相对应的domain[ x0,x1 ]中值的范围:quantile的反演。这种方法对于交互很有用,比方说确定domain中与鼠标下像素位置相对应的值。
quantile.domain([domain])
如果指定了domain,则设置分位数比例尺的domain为指定的离散数值组。该数组不能为空,并且必须包含至少一个数值;NaN,null和undefined会被忽略,不被视为样本总体的一部分。如果给定数组中的元素不是数字,它们将被强制为数字。将在内部排序并存储输入数组的一个副本。如果不指定domain,则返回比例尺当前的domain。
quantile.range([range])
如果指定了range,则设置range中的离散值。该数组不能为空,并且可能包含任何类型的值。range数组中的值的数量(基数或长度)决定了计算出的分位数的数量。例如,要计算四分位数,range必须是由四个元素组成的数组,例如[0,1,2,3]。如果不指定range,则返回当前的range。
quantile.quantiles()
返回分位数阈值。如果range包含n个离散值,则返回的数组将包含n - 1个阈值。小于第一阈值的值在第一分位数中;大于或等于第一阈值但小于第二阈值的值在第二分位数中,等等。在内部,阈值数组与bisect一起用于查找与给定输入值关联的输出分位数。
quantile.copy()
返回此比例尺的精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。
Threshold Scales
阈值比例尺与量化比例尺相似,只不过它们允许你将domain的任意子集映射到range中的离散值。输入domain仍然是连续的,并根据一组阈值划分成片。另请参阅bl.ocks.org/3306362查看示例。
d3.scaleThreshold()
使用默认domain [0.5]和默认range [0,1 ] 构造一个新的阈值比例尺。因此,默认阈值比例尺等于数字的Math.round函数;例如阈值(0.49)返回0,阈值(0.51)返回1。
threshold(value)
给定输入domain中的value,返回输出range中的相应值。例如:
var color = d3.scaleThreshold()
.domain([0, 1])
.range(["red", "white", "green"]);
color(-1); // "red"
color(0); // "white"
color(0.5); // "white"
color(1); // "green"
color(1000); // "green"
threshold.invertExtent(value)
返回range中相应value的domain [ x0,x1 ]中值的范围,表示从范围到域的反向映射。这种方法对于交互很有用,比方说确定domain中与鼠标下像素位置相对应的值。例如:
var color = d3.scaleThreshold()
.domain([0, 1])
.range(["red", "white", "green"]);
color.invertExtent("red"); // [undefined, 0]
color.invertExtent("white"); // [0, 1]
color.invertExtent("green"); // [1, undefined]
threshold.domain([domain])
如果指定了domain,则将比例尺domain设置为指定的值数组。值必须按升序排序,或者比例尺的行为未定义。值通常是数字,但任何自然排序的值(如字符串)都可以使用;可以使用阈值比例尺来对任何有序的类型进行编码。如果比例尺range内的值的数量为N + 1,则比例尺domain中的值的数量必须为N。如果domain中少于N个元素,则range内的其他值将被忽略。如果domain中有超过N个元素,则某些输入值可能会返undefined。如果不指定domain,则返回比例尺当前的domain。
threshold.range([range])
如果指定了range,则将比例尺range设置为指定的值数组。如果比例尺domain中的值的数量是N,那么比例尺range内的值的数量必须是N + 1。如果range内的元素少于N + 1个,则某些输入值可能会返回undefined。如果range中有超过N + 1个元素,则会忽略其他值。给定数组中的元素不一定是数字;任何价值或类型都可以。如果不指定range,则返回比例尺当前的range。
threshold.copy()
返回此比例尺的精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。
Ordinal Scales
与连续比例尺不同,序数比例尺具有离散的domain和range。例如,序数比例尺可能会将一组命名类别映射到一组颜色,或者确定柱形图中柱子的水平位置。
d3.scaleOrdinal([range])
用空的domain和指定的range构造一个新的序数比例尺。如果不指定range,则默认为空数组;一个序数比例尺总是返回undefined直到定义一个非空range。
ordinal(value)
给定输入domain中的value,返回输出range中的相应值。如果给定的value不在比例尺的domain中,则返回unknown;或者,如果unknown值是隐式的(默认值),则该value隐式地添加到domain中,并且该range中的下一个可用值被赋值为value,使得该比例尺给定相同输入value的调用和后续调用返回相同的输出值。
ordinal.domain([domain])
如果指定了domain,则设置domain为指定的值数组。domain中的第一个元素将被映射到range中的第一个元素,第二个domain值到第二个range值,依此类推。domain值内部存储在从字符串化值到索引的映射中;然后使用生成的索引从range中检索一个值。因此,序数比例尺的值必须可以强制为一个字符串,并且domain值的字符串化版本唯一标识了相应的range值。如果不指定domain,则此方法返回当前的domain。
如果unknown value是隐式的(默认值),则按顺序设置domain是可选的。在这种情况下,则通过为每个传递给该比例尺的唯一值分配一个该range中的新值来隐式地推断出domain。请注意,建议使用显式domain来确保确定性行为,因为从使用中推断domain将取决于顺序。
ordinal.range([range])
如果指定了range,则设置序数比例尺的range为给定的值数组。domain中的第一个元素将映射到range中的第一个元素,第二个domain值映射到第二个range值,依此类推。如果range内的元素少于domain中的元素,则比例尺将重新使用range起始处的值。如果不指定range,则此方法返回当前的range。
ordinal.unknown([value])
如果指定了value,则为unknown(未知)值设置比例尺输出值,并返回此比例尺。如果不指定value,则返回当前未知值,该值默认为implicit(隐式的)。隐式值使构造隐式domain成为可能;请参阅ordinal .domain。
ordinal.copy()
返回此序数比例尺的精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。
d3.scaleImplicit
ordinal.unknown的特殊值,允许构建隐式domain:未知值将隐式添加到domain中。
Band Scales
除了输出range是连续的、数字的以外,就像序数比例尺。离散输出值通过将连续range划分为均匀的band而自动计算。band scale通常用于有序或分类维度的条形图。band scale的unknown value是不确定的:它们不允许隐式构造domain。
d3.scaleBand()
用空domain、单元range[0,1]构造一个新的band scale,没有填充,不舍入,居中对齐。
band(value)
给定输入domain中的value,返回从输出range派生的相应band的开始。如果给定value不在比例尺的domain中,则返回undefined。
band.domain([domain])
如果指定了domain,则设置domain为给定的值数组。domain中的第一个元素将映射到第一个band,第二个domain值映射到第二个band,依此类推。domain值内部存储在从字符串化值到索引的映射中;得到的索引之后将用于确定band。因此,band scale的值必须可以强制为一个字符串,并且domain值的字符串化版本唯一标识相应的band。如果不指定domain,则此方法返回当前的domain。
band.range([range])
如果指定了range,则设置比例尺range为给定的二元数字数组。如果给定数组中的元素不是数字,它们将被强制转换为数字。如果不指定range,则返回比例尺当前的range,默认为[0,1]。
band.rangeRound([range])
将比例尺的range设置为指定的二元数字数组,同时启用舍入。这是一种简便方法,相当于:
band
.range(range)
.round(true);
舍入有时可用于避免抗锯齿,但也可以考虑形状渲染 “crispEdges”风格。
band.round([round])
如果指定了round,则启用或禁用相应的舍入。如果启用舍入,每个band的开始和停止将是整数。舍入有时可用于避免抗锯齿,但也可以考虑形状渲染 “crispEdges”风格。请注意,如果domain的宽度不是range的基数的倍数,那么即使没有填充,也可能存在剩余的未使用空间!可以使用band.align指定如何分配剩余空间。
band.paddingInner([padding])
如果指定了padding,则设置内部填充为指定值,其必须是在[0,1]中。如果不指定padding,则返回当前内部填充,默认为0。内部填充确定band之间保留的空白区域,其为range的比率。
band.paddingOuter([padding])
如果指定了padding,则设置外部填充为指定值,其必须是在[0,1]中。如果不指定padding,则返回当前外部填充,默认为0。外部填充确定第一个band之前和最后一个band之后保留的空白区域,其为range的比率。
band.padding([padding])
将内部和外部填充设置为相同padding值的简便方法。如果不指定padding,则返回内部填充。
band.align([align])
如果指定了align,则设置对齐为指定值,其必须是在[0,1]中。如果不指定align,则返回当前对齐值,默认为0.5。对齐值确定了如何分配range内剩余的未使用空间。值为0.5表示剩余空间在第一个band之前和最后一个band之后应该均匀分布;即band应该在range内居中。可以使用值0或1来将band移到一侧,比如说将它们放置在靠近一个轴的位置。
band.bandwidth()
返回每一个band的宽度。
band.step()
返回相邻band开始之间的距离。
band.copy()
返回此比例尺的精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。
Point Scales
点比例尺是带宽固定为零的band scale的变体。点比例尺通常用于有序或分类维度的散点图。点比例尺的unknown value始终未定义:它们不允许隐式构造domain。
d3.scalePoint()
用空domain、单元range[0,1],构造一个新点比例尺,没有填充,不舍入,居中对齐。
point(value)
给定输入domain中的value,返回从输出range派生的对应点。如果给定value不在比例尺的domain中,则返回undefined。
point.domain([domain])
如果指定了domain,则设置domain为给定的值数组。domain中的第一个元素将映射到第一个点,第二个domain值映射到第二个点,依此类推。domain值内部存储在从字符串化值到索引的映射中;所得到的索引之后将用于确定点。因此,点比例尺的值必须可以强制转换为一个字符串,并且domain值的字符串化版本唯一标识相应的点。如果不指定domain,则此方法返回当前的domain。
point.range([range])
如果指定了range,则设置比例尺range为给定的二元数字数组。如果给定数组中的元素不是数字,它们将被强制为数字。如果不指定range,则返回比例尺当前的range,默认为[0,1]。
point.rangeRound([range])
将比例尺的range设置为指定的二元数字数组,同时启用舍入。这是一种简便方法,相当于:
point
.range(range)
.round(true);
舍入有时可用于避免抗锯齿,但也可以考虑形状渲染 “crispEdges”风格。
point.round([round])
如果指定了round,则启用或禁用相应的舍入。如果启用舍入,每个band的开始和停止将是整数。舍入有时可用于避免抗锯齿,但也可以考虑形状渲染 “crispEdges”风格。请注意,如果domain的宽度不是range的基数的倍数,那么即使没有填充,也可能存在剩余的未使用空间!可以使用point.align指定如何分配剩余空间。
point.padding([padding])
如果指定了padding,则设置外部填充为指定值,其必须是在[0,1]中。如果不指定padding,则返回当前外部填充,默认为0。外部填充确定第一个点之前和最后一个点之后保留的空白区域,其为range的比率。相当于band.paddingOuter。
point.align([align])
如果指定了align,则设置对齐为指定值,其必须是在[0,1]中。如果不指定align,则返回当前对齐,默认为0.5。对齐确定了如何分配range内剩余的未使用空间。值为0.5表示剩余空间在第一个点之前和最后一个点之后应该均匀分布;即点应该在range内居中。可以使用值0或1来将点移到一侧,比如说将它们放置在靠近一个轴的位置。
point.bandwidth()
返回0。
point.step()
返回相邻两个点开始的距离。
point.copy()
返回此比例尺的精确副本。此比例尺的变化不会影响返回的比例尺,反之亦然。