跳至内容

区域

示例 · 区域生成器生成一个由顶线基线定义的区域,如面积图所示。通常,这两条线共享相同的xx0 = x1),仅在y 值(y0y1)上有所不同;最常见的是,y0 被定义为一个常数,代表零(y 刻度对零的输出)。顶线 由 x1 和 y1 定义,并首先渲染;基线 由 x0 和 y0 定义,并其次渲染,点按反向顺序排列。使用 curveLinear 曲线,这将产生一个顺时针多边形。另请参阅 径向区域.

area(x, y0, y1)

源代码 · 使用给定的xy0y1 访问器或数字构造一个新的区域生成器。

js
const area = d3.area((d) => x(d.Date), y(0), (d) => y(d.Close));

如果未指定xy0y1,则将使用各自的默认值。以上可以更明确地表示为

js
const area = d3.area()
    .x((d) => x(d.Date))
    .y0(y(0))
    .y1((d) => y(d.Close));

area(data)

源代码 · 为给定的data 数组生成一个区域。

js
svg.append("path").attr("d", area(data));

如果区域生成器具有 上下文,则区域将被渲染到此上下文中,作为一系列 路径方法 调用,此函数返回 void。否则,将返回一个 路径数据 字符串。

警告

根据此区域生成器关联的 曲线,给定的输入data 可能需要在传递给区域生成器之前按x 值排序。

area.x(x)

源代码 · 如果指定了x,则将 x0 设置为x,并将 x1 设置为 null,并返回此区域生成器。

js
const area = d3.area().x((d) => x(d.Date));

如果未指定x,则返回当前的 x0 访问器。

js
area.x() // (d) => x(d.Date)

area.x0(x)

提示

此方法适用于垂直方向的区域,例如当时间向下↓而不是向右→时;对于更常见的水平方向的区域,请改用 area.x

源代码 · 如果指定了x,则将 x0 访问器设置为指定的函数或数字,并返回此区域生成器。

js
const area = d3.area().x0(x(0));

当生成区域时,x0 访问器将为输入数据数组中的每个已定义 元素调用,将元素d、索引i 和数组data 作为三个参数传递。

如果未指定x,则返回当前的 x0 访问器。

js
area.x0() // () => 20

x0 访问器的默认值为

js
function x(d) {
  return d[0];
}

默认的 x0 访问器假设输入数据是数字的二元数组 [[x0, y0], [x1, y1], …]。如果您的数据采用不同的格式,或者您希望在渲染之前转换数据,那么您应该指定一个自定义访问器,如上所示。

area.x1(x)

提示

此方法适用于垂直方向的区域,例如当时间向下↓而不是向右→时;对于更常见的水平方向的区域,请改用 area.x

源代码 · 如果指定了x,则将 x1 访问器设置为指定的函数或数字,并返回此区域生成器。

js
const area = d3.area().x1((d) => x(d.Close));

当生成区域时,x1 访问器将为输入数据数组中的每个已定义 元素调用,将元素d、索引i 和数组data 作为三个参数传递。

如果未指定x,则返回当前的 x1 访问器。

js
area.x1() // (d) => x(d.Close)

x1 访问器的默认值为 null,表示应该将先前计算的 x0 值重复用于 x1 值;此默认值适用于水平方向的区域。

area.y(y)

提示

此方法适用于垂直方向的区域,例如当时间向下↓而不是向右→时;对于更常见的水平方向的区域,请改用 area.y0area.y1

源代码 · 如果指定了y,则将 y0 设置为y,并将 y1 设置为 null,并返回此区域生成器。

js
const area = d3.area().y((d) => y(d.Date));

如果未指定y,则返回当前的 y0 访问器。

js
area.y() // (d) => y(d.Date)

area.y0(y)

源代码 · 如果指定了y,则将 y0 访问器设置为指定的函数或数字,并返回此区域生成器。

js
const area = d3.area().y0(y(0));

当生成区域时,y0 访问器将为输入数据数组中的每个已定义 元素调用,将元素d、索引i 和数组data 作为三个参数传递。对于具有恒定基线的水平方向的区域(,未堆叠的区域,而不是丝带或条带),y0 通常设置为 y 刻度对零的输出。

如果未指定y,则返回当前的 y0 访问器。

js
area.y0() // () => 360

y0 访问器的默认值为

js
function y() {
  return 0;
}

在默认的 SVG 坐标系中,请注意,默认的零代表图表顶部而不是底部,生成一个翻转(或“悬挂”)的区域。

area.y1(y)

源代码 · 如果指定了y,则将 y1 访问器设置为指定的函数或数字,并返回此区域生成器。

js
const area = d3.area().y1((d) => y(d.Close));

当生成区域时,y1 访问器将为输入数据数组中的每个已定义 元素调用,将元素d、索引i 和数组data 作为三个参数传递。

如果未指定y,则返回当前的 y1 访问器。

js
area.y1() // (d) => y(d.Close)

y1 访问器的默认值为

js
function y(d) {
  return d[1];
}

默认的 y1 访问器假设输入数据是数字的二元数组 [[x0, y0], [x1, y1], …]。如果您的数据采用不同的格式,或者您希望在渲染之前转换数据,那么您应该指定一个自定义访问器,如上所示。也允许使用 null 访问器,表示应将先前计算的 y0 值重复用于 y1 值;这可用于垂直方向的区域,例如当时间向下↓而不是向右→时。

area.defined(defined)

示例 · 源代码 · 如果指定了defined,则将 defined 访问器设置为指定的函数或布尔值,并返回此区域生成器。

js
const area = d3.area().defined((d) => !isNaN(d.Close));

当生成区域时,defined 访问器将为输入数据数组中的每个元素调用,将元素d、索引i 和数组data 作为三个参数传递。如果给定的元素已定义(,如果 defined 访问器对此元素返回一个真值),则随后将评估 x0x1y0y1 访问器,并将该点添加到当前区域段。否则,将跳过该元素,结束当前区域段,并将为下一个已定义的点生成一个新的区域段。因此,生成的区域可能包含多个离散段。

如果未指定defined,则返回当前的 defined 访问器。

js
area.defined() // (d) => !isNaN(d.Close)

defined 访问器的默认值为常量 true,并假设输入数据始终已定义

js
function defined() {
  return true;
}

请注意,如果一个区域段只包含一个点,它可能不可见,除非用圆形或方形线帽渲染。此外,某些曲线,如curveCardinalOpen,只有在包含多个点时才会渲染可见的段。

area.curve(curve)

源代码 · 如果指定了curve,则设置曲线工厂并返回此区域生成器。

js
const area = d3.area().curve(d3.curveStep);

如果未指定curve,则返回当前曲线工厂,默认值为curveLinear

js
area.curve() // d3.curveStep

area.context(context)

源代码 · 如果指定了context,则设置上下文并返回此区域生成器。

js
const context = canvas.getContext("2d");
const area = d3.area().context(context);

如果未指定context,则返回当前上下文。

js
area.context() // context

上下文默认为 null。如果上下文不为 null,则生成的区域将作为一系列路径方法调用渲染到此上下文。否则,将返回表示生成区域的路径数据字符串。

area.digits(digits)

源代码 · 如果指定了digits,则设置小数点后最大位数并返回此区域生成器。

js
const area = d3.area().digits(3);

如果未指定digits,则返回当前最大小数位数,默认为 3。

js
area.digits() // 3

此选项仅在关联的context 为 null 时适用,例如,当此区域生成器用于生成路径数据时。

area.lineX0()

它是area.lineY0的别名。

area.lineY0()

源代码 · 返回一个新的线生成器,它具有此区域生成器的当前定义访问器曲线上下文。线的x访问器是此区域的x0访问器,线的y访问器是此区域的y0访问器

area.lineX1()

源代码 · 返回一个新的线生成器,它具有此区域生成器的当前定义访问器曲线上下文。线的x访问器是此区域的x1访问器,线的y访问器是此区域的y0访问器

area.lineY1()

源代码 · 返回一个新的线生成器,它具有此区域生成器的当前定义访问器曲线上下文。线的x访问器是此区域的x0访问器,线的y访问器是此区域的y1访问器