等高线多边形
对于每个 阈值,等高线生成器 构造一个 GeoJSON 多边形几何对象,表示输入值大于或等于阈值的区域。几何图形位于平面坐标系中,其中 ⟨i + 0.5, j + 0.5⟩ 对应于输入值数组中元素 i + jn。
以下是一个加载表面温度 GeoTIFF 的示例,另一个示例是模糊噪声单色 PNG 以生成平滑的云量分数等高线
由于等高线多边形是 GeoJSON,因此您可以使用标准工具对其进行转换和显示;例如,请参阅 geoPath、geoProject 和 geoStitch。这里,上述表面温度等高线以自然地球投影显示
等高线图还可以通过采样来可视化连续函数。这里显示了 Goldstein–Price 函数(用于全局优化的测试函数)以及一个sin(x + y)sin(x - y) 的迷幻动画
contours()
示例 · 源代码 · 使用默认设置构造一个新的等高线生成器。
const contours = d3.contours()
.size([width, height])
.thresholds([0, 1, 2, 3, 4]);
contours(values)
源代码 · 计算给定values 数组的等高线,返回一个包含 GeoJSON MultiPolygon 几何对象 的数组。
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
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);
}
}
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 是行数;n 和 m 必须是正整数。如果未指定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。