等值線多邊形
對於每個 閾值,等值線產生器 會建構一個 GeoJSON MultiPolygon 幾何物件,代表輸入值大於或等於閾值的區域。幾何圖形以平面座標表示,其中 ⟨i + 0.5, j + 0.5⟩ 對應於輸入值陣列中元素 i + jn。
以下是一個載入地表溫度 GeoTIFF 的範例,另一個是模糊化雜訊單色 PNG 以產生雲量平滑等值線的範例
由於等值線多邊形是 GeoJSON,因此您可以使用標準工具轉換和顯示它們;例如,請參閱 geoPath、geoProject 和 geoStitch。這裡顯示了上述地表溫度等值線在自然地球投影中的樣子
等值線圖也可以透過抽樣視覺化連續函數。以下是 Goldstein-Price 函數(用於全域最佳化的測試函數)和 sin(x + y)sin(x - y) 的迷幻動畫
等值線 ()
const contours = d3.contours()
.size([width, height])
.thresholds([0, 1, 2, 3, 4]);
contours(values)
原始碼 · 計算給定 values 陣列的等值線,傳回一個 GeoJSON 多邊形 幾何物件 陣列。
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 多邊形 幾何物件,代表輸入 values 大於或等於給定 閾值 的區域;每個幾何物件的閾值會顯示為 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 個區間;請參閱 刻度。