跳到内容

等高线多边形

对于每个 阈值等高线生成器 构造一个 GeoJSON 多边形几何对象,表示输入值大于或等于阈值的区域。几何图形位于平面坐标系中,其中 ⟨i + 0.5, j + 0.5⟩ 对应于输入值数组中元素 i + jn

以下是一个加载表面温度 GeoTIFF 的示例,另一个示例是模糊噪声单色 PNG 以生成平滑的云量分数等高线

GeoTiff Contours

Cloud Contours

由于等高线多边形是 GeoJSON,因此您可以使用标准工具对其进行转换和显示;例如,请参阅 geoPathgeoProjectgeoStitch。这里,上述表面温度等高线以自然地球投影显示

GeoTiff Contours II

等高线图还可以通过采样来可视化连续函数。这里显示了 Goldstein–Price 函数(用于全局优化的测试函数)以及一个sin(x + y)sin(x - y) 的迷幻动画

Contours

Animated Contours

contours()

示例 · 源代码 · 使用默认设置构造一个新的等高线生成器。

js
const contours = d3.contours()
    .size([width, height])
    .thresholds([0, 1, 2, 3, 4]);

contours(values)

源代码 · 计算给定values 数组的等高线,返回一个包含 GeoJSON MultiPolygon 几何对象 的数组。

js
const polygons = contours(grid);

每个几何对象都表示输入values 大于或等于相应 阈值 的区域;每个几何对象的阈值在geometry.value 中公开。

输入values 必须是一个长度为 n×m 的数组,其中 [n, m] 是等高线生成器的 大小;此外,每个 values[i + jn] 必须表示位置 ⟨i, j⟩ 处的值。例如,要为 Goldstein–Price 函数 构造一个 256×256 网格,其中 -2 ≤ x ≤ 2 且 -2 ≤ y ≤ 1

js
var n = 256, m = 256, values = new Array(n * m);
for (var j = 0.5, k = 0; j < m; ++j) {
  for (var i = 0.5; i < n; ++i, ++k) {
    values[k] = goldsteinPrice(i / n * 4 - 2, 1 - j / m * 3);
  }
}
js
function goldsteinPrice(x, y) {
  return (1 + Math.pow(x + y + 1, 2) * (19 - 14 * x + 3 * x * x - 14 * y + 6 * x * x + 3 * y * y))
      * (30 + Math.pow(2 * x - 3 * y, 2) * (18 - 32 * x + 12 * x * x + 48 * y - 36 * x * y + 27 * y * y));
}

返回的几何对象通常传递给 geoPath 以进行显示,使用 null 或 geoIdentity 作为关联投影。

contours.contour(values, threshold)

源代码 · 计算单个等高线,返回一个 GeoJSON MultiPolygon 几何对象,表示输入values 大于或等于给定 threshold 的区域;每个几何对象的阈值在geometry.value 中公开。

输入values 必须是一个长度为 n×m 的数组,其中 [n, m] 是等高线生成器的 大小;此外,每个 values[i + jn] 必须表示位置 ⟨i, j⟩ 处的值。请参阅 contours 以获取示例。

contours.size(size)

源代码 · 如果指定了size,则将输入values 网格的预期大小设置为 等高线生成器 并返回等高线生成器。size 指定为一个数组 [n, m],其中 n 是网格中的列数,m 是行数;nm 必须是正整数。如果未指定size,则返回当前大小,默认值为 [1, 1]。

contours.smooth(smooth)

示例 · 源代码 · 如果指定了smooth,则设置生成的等高线多边形是否使用线性插值进行平滑处理。如果未指定smooth,则返回当前平滑标志,默认值为 true。

contours.thresholds(thresholds)

源代码 · 如果指定了thresholds,则将阈值生成器设置为指定函数或数组,并返回此等高线生成器。如果未指定thresholds,则返回当前阈值生成器,默认情况下它实现 Sturges’ 公式

阈值定义为一个值数组 [x0, x1, …]。第一个生成的等高线对应于输入值大于或等于x0 的区域;第二个等高线对应于输入值大于或等于x1 的区域,依此类推。因此,对于每个指定的阈值,恰好有一个生成的 MultiPolygon 几何对象;阈值在geometry.value 中公开。

如果指定了count 而不是thresholds 数组,则输入值的 范围 将被均匀地划分为大约count 个箱子;请参阅 ticks