Arrays - zziuni/d3 GitHub Wiki
Wiki βΈ API Reference βΈ Core βΈ Arrays
D3λ₯Ό λ°μ΄ν°λ₯Ό μκ°ν νκΈ° μν΄μ μ¬μ©ν λ, μΌλ°μ μΌλ‘ λ°°μ΄ μ‘°μ μ λ§μ΄ νκ² λλ€. μ΄κ±΄ D3μ 곡μμ μΈ λ°μ΄ν° ννμ΄ λ°°μ΄μ΄κΈ° λλ¬Έμ΄λ€. λ°°μ΄ μ‘°μμ μΌλ°μ μΌλ‘ λ°°μ΄μμ μΈμ ν μ‘°κ°μ λΆλΆμ§ν©μΌλ‘ μ·¨λ, μμ ν¨μλ₯Ό μ¬μ©ν΄μ λ°°μ΄μ νν°λ§, λ³ν ν¨μλ₯Ό μ¬μ©ν΄μ λ°°μ΄μ λμΌ μ μ κ°λ€κ³Ό 맀νκ³Ό κ°μ μμ μ ν¬ν¨νλ€. D3κ° λ°°μ΄ μμ μ μν΄ μ 곡νλ μ νΈλ¦¬ν°λ€μ 보기μ μ μλ°μ€ν¬λ¦½νΈμ λ°°μ΄ κ΄λ ¨ λΉνΈμΈ λ©μλμ λ¨Όμ μ΅μν΄μ ΈμΌ νλ€.
λ€μμ λ°°μ΄μ λ³κ²½νλ **mutator method(setter)**λ€μ΄λ€.
- array.reverse - λ°°μ΄ μμμ μμλ₯Ό μμμΌλ‘ λ°κΎΌλ€.
- array.shift - λ°°μ΄μ 첫 μμλ₯Ό μ κ±°νλ€.
- array.sort - λ°°μ΄ μμλ₯Ό μ λ ¬νλ€.
- array.splice - λ°°μ΄μ μμλ₯Ό μΆκ°νκ±°λ μ κ±°νλ€.
- array.unshift - λ°°μ΄μ μμͺ½μ νλ μ΄μμ μμλ₯Ό μΆκ°νλ€.
λ€μμ λ°°μ΄μ ν ννλ₯Ό λ°ννλ **accessor method(getter)**μ΄λ€.
- array.concat - λ°°μ΄μ λ€λ₯Έ λ°°μ΄μ΄λ κ°κ³Ό ν©μΉλ€.
- array.join - λ°°μ΄μ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ ν©μΉλ€.
- array.slice - λ°°μ΄μ μΌλΆλ₯Ό μΆμΆνλ€.
- array.indexOf - λ°°μ΄μμ μ°Ύλ κ°μ 첫 μμΉλ₯Ό μ°Ύλλ€.
- array.lastIndexOf - λ°°μ΄μμ μ°Ύλ κ°μ λ§μ§λ§ μμΉλ₯Ό μ°Ύλλ€.
λμΌλ‘, λ°°μ΄μ μμλ³λ‘ ν¨μλ₯Ό μ μ©νλ iteration methodλ€.
- array.filter - μ½λ°± ν¨μκ° trueμ ν΄λΉνλ μμλ§ μ κ· λ°°μ΄λ‘ μμ±νλ€.
- array.forEach - λ°°μ΄μ κ° μμλ³λ‘ μ½λ°± ν¨μλ₯Ό νΈμΆνλ€.
- array.every - λ°°μ΄μ λͺ¨λ μμκ° μ½λ°± ν¨μμ ν©λΉνμ§λ₯Ό κ²μ¬νλ€.
- array.map - λ°°μ΄μ λͺ¨λ μμμ μ½λ°± ν¨μλ₯Ό μ μ©ν κ²°κ³Όλ‘ μ κ· λ°°μ΄μ μμ±νλ€.
- array.some - λ°°μ΄μ μμμ€μ νλλΌλ μ½λ°± ν¨μμ ν©λΉνμ§λ₯Ό κ²μ¬νλ€.
- array.reduce - λ°°μ΄μ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ κ°μ νλμ© μ€μ¬κ°λ©΄μ μ½λ°± ν¨μλ₯Ό μ μ©νλ€.
- array.reduceRight - λ°°μ΄μ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ κ°μ νλμ© μ€μ¬κ°λ©΄μ μ½λ°± ν¨μλ₯Ό μ μ©νλ€.
# d3.ascending(a, b)
a κ° b λ³΄λ€ μμΌλ©΄ -1, a κ° b λ³΄λ€ ν¬λ©΄ 1, κ°μΌλ©΄ 0μ λ°ννλ€. μ΄ ν¨μλ natural order μν λΉκ΅ ν¨μλ€. μ€λ¦μ°¨μ μ λ ¬λ‘ μμλ₯Ό λμ΄νκΈ° μν΄μ μλ°μ€ν¬λ¦½νΈ λΉνΈ-μΈ λ°°μ΄ λ©μλμΈ sortμ μ‘°ν©ν΄μ μ¬μ©ν μ μλ€.
function(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
μλ°μ€ν¬λ¦½νΈμλ λΉνΈ-μΈ sort λ©μλμ μ§μ ν λΉκ΅ ν¨μκ° μλ€. sort λ©μλμ κΈ°λ³Έ μ λ ¬μ naturalμ΄ μλ lexicographic(alphabetical) μ λ ¬μ΄κ³ μ«μ λ°°μ΄μ μ λ ¬ ν λλ μ€λ₯λ₯Ό μ λ°ν μ μλ€.
lexicographic orderλ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ ν κΈμμ© λΉκ΅νλ©° μνλ²³ μμΌλ‘ μ λ ¬νλ λ°©μμ μλ―Ένλ€. κ·Έλμ ["1", "10", "2", "3", ] μ²λΌ μ λ ¬λλ€.
# d3.descending(a, b)
a κ° b λ³΄λ€ ν¬λ©΄ -1, a κ° b λ³΄λ€ μμΌλ©΄ 1, κ°μΌλ©΄ 0μ λ°ννλ€. μ΄ ν¨μλ reverse natural μ λ ¬μ μν λΉκ΅ ν¨μλ€. λ΄λ¦Όμ°¨μ μ λ ¬λ‘ μμλ₯Ό λμ΄νκΈ° μν΄μ μλ°μ€ν¬λ¦½νΈ λΉνΈμΈ λ°°μ΄ λ©μλμΈ sortμ μ‘°ν©ν΄μ μ¬μ©ν μ μλ€.
function(a, b) {
return b < a ? -1 : b > a ? 1 : 0;
}
μλ°μ€ν¬λ¦½νΈμλ λΉνΈ μΈ sort λ©μλμ μ§μ ν λΉκ΅ ν¨μκ° μλ€. sort λ©μλμ κΈ°λ³Έ μ λ ¬μ naturalμ΄ μλ lexicographic(alphabetical) μ λ ¬μ΄κ³ μ«μ λ°°μ΄μ μ λ ¬ ν λλ μ€λ₯λ₯Ό μ λ°ν μ μλ€.
# d3.min(array[, accessor])
μ λ¬μΈμ array μμ natural μ λ ¬ κΈ°μ€μΌλ‘ μ΅μκ°μ λ°ννλ€. λ°°μ΄μ΄ λΉμμΌλ©΄ undefinedλ₯Ό λ°ννλ€. μ΅μκ° κ³μ°μ μ array.map(accessor) μ²λΌ μ μ©νκ³ μΆμΌλ©΄ accessor ν¨μλ₯Ό μ΅μ μΌλ‘ μ¬μ©ν μ μλ€. μ΄ λ©μλλ μλ°μ€ν¬λ¦½νΈ λΉνΈ-μΈ λ©μλ Math.minμλ λ¬λ¦¬ undefined κ°λ₯Ό 무μνλ€. μ΄ λ©μλλ λ°μ΄ν°μ λ²μλ₯Ό κ³ λ €νλ©΄μ scaleμ μ λ ₯ λ²μλ₯Ό κ³μ°νλλ° μ μ©νλ€. κ·Έλ¦¬κ³ λ°°μ΄ μμλ numeric μ λ ¬μ΄ μλλΌ natural μ λ ¬μ μ¬μ©ν΄ λΉκ΅λλ€. μλ₯Ό λ€μ΄, ["20", "3"]μ μ΅μκ°μ "20"μ΄κ³ [20, 3]μ μ΅μκ°μ 3μ΄λ€.
# d3.max(array[, accessor])
μ λ¬μΈμ array μμ natural μ λ ¬ κΈ°μ€μΌλ‘ μ΅λκ°μ λ°ννλ€. λ°°μ΄μ΄ λΉμ΄μμΌλ©΄ undefinedλ₯Ό λ°ννλ€. μ΅λκ° κ³μ°μ μ array.map(accessor) μ²λΌ μ μ©νκ³ μΆμΌλ©΄ accessor ν¨μλ₯Ό μ΅μ μΌλ‘ μ¬μ©ν μ μλ€. μ΄ λ©μλλ μλ°μ€ν¬λ¦½νΈ λΉνΈ-μΈ λ©μλ Math.maxμλ λ¬λ¦¬ undefined κ°λ₯Ό 무μνλ€. μ΄ λ©μλλ λ°μ΄ν°μ λ²μλ₯Ό κ³ λ €νλ©΄μ scaleμ μ λ ₯ λ²μλ₯Ό κ³μ°νλλ° μ μ©νλ€. κ·Έλ¦¬κ³ λ°°μ΄ μμλ numeric μ λ ¬μ΄ μλλΌ natural μ λ ¬μ μ¬μ©ν΄ λΉκ΅λλ€. μλ₯Ό λ€μ΄, ["20", "3"]μ μ΅λκ°μ "3"μ΄κ³ [20, 3]μ μ΅λκ°μ 20μ΄λ€.
# d3.extent(array[, accessor])
μ λ¬μΈμ array λ°°μ΄μ natural μ λ ¬μ μ¬μ©ν΄μ μ΅λ, μ΅μκ°μ λ°ννλ€. μ΄ λ©μλλ d3.minκ³Ό d3.maxλ₯Ό λμμ νΈμΆν κ²κ³Ό κ°λ€.
# d3.sum(array[, accessor])
μ λ¬μΈμ array λ°°μ΄ μμμ ν©μ λ°ννλ€. λ°°μ΄μ΄ λΉμμΌλ©΄ 0μ λ°ννλ€. ν©μ κ³μ°νκΈ°μ μ arrary.map(accessor) μ²λΌ μ μ©νκ³ μΆμΌλ©΄ accessor ν¨μλ₯Ό μ΅μ μΌλ‘ μ¬μ©ν μ μλ€. μ΄ λ©μλλ NaNκ³Ό undefined κ°μ μ ν¨νμ§ μμ κ°μ 무μνλ€. κ·Έλμ μ ν¨ν κ°λ§μΌλ‘ λ°μ΄ν°λ₯Ό ν©μ°νλ κ³μ°μ μ μ©νλ€.
# d3.mean(array[, accessor])
μ λ¬μΈμ array μμλ€μ νκ· μ λ°ννλ€. λ°°μ΄μ΄ λΉμμΌλ©΄ undefinedλ₯Ό λ°ννλ€. νκ· μ κ³μ°νκΈ° μ μ array.map(accessor) μ²λΌ μ μ©νκ³ μΆμΌλ©΄ accessor ν¨μλ₯Ό μ΅μ μΌλ‘ μ¬μ©ν μ μλ€. μ΄ λ©μλλ NaNκ³Ό undefined κ°μ μ ν¨νμ§ μμ κ°μ 무μνλ€. κ·Έλμ μ ν¨ν κ°λ§μΌλ‘ λ°μ΄ν°λ₯Ό νκ· λ΄λ κ³μ°μ μ μ©νλ€.
# d3.median(array[, accessor])
R-7μκ³ λ¦¬μ¦μ μ¬μ©ν΄μ μ λ¬μΈμ array λ°°μ΄μ μμλ€μ μ€μκ°μ λ°ννλ€. λ°°μ΄μ΄ λΉμ΄μμΌλ©΄ undefinedλ₯Ό λ°ννλ€. μ€μκ°μ κ³μ°νκΈ°μ μ array.map(accessor) μ²λΌ μ μ©νκ³ μΆμΌλ©΄ accessor ν¨μλ₯Ό μ΅μ μΌλ‘ μ¬μ©ν μ μλ€. μ΄ λ©μλλ NaNκ³Ό undefined κ°μ μ ν¨νμ§ μμ κ°μ 무μνλ€. κ·Έλμ μ ν¨ν κ°λ§μΌλ‘ λ°μ΄ν° μ€μκ°μ κ³μ°μ μ μ©νλ€.
# d3.quantile(numbers, p)
μ λ¬μΈμ numbers λ°°μ΄μ μ λ ¬ν΄μ p-quantileλ₯Ό λ°ννλ€. μ λ¬μΈμ p λ [0,1] μ¬μ΄μ μ«μμ΄λ€. μλ₯Ό λ€μ΄ μ€μκ°μ p = 0.5λ₯Ό μ¬μ©νλ©΄ κ³μ°ν μ μλ€. p = 0.25μ΄λ©΄ 1/4 μ§μ κ°μ, p = 0.75μ΄λ©΄ 3/4 μ§μ κ°μ΄λ€. μ΄λ° λ νΉν ꡬνμ R νλ‘κ·Έλλ°κ³Ό μ‘μ μ κΈ°λ°μΈ R-7 μκ³ λ¦¬μ¦μ μ¬μ©νλ€. μ΄ λ©μλλ μΈμμΈ numbers λ μμκ° μ«μνμ΄μ¬μΌ νκ³ d3.ascendingκ°μ λ©μλλ₯Ό μ¬μ©ν΄μ μ€λ¦μ°¨μμΌλ‘ μ¬μ μ μ λ ¬μ΄ λμ΄μμ΄μΌ νλ€.
# d3.bisectLeft(array, x[, lo[, hi]])
μ λ¬μΈμ array λ°°μ΄μμ κ·Έ μ λ ¬ μμνμ x μ μ½μ μμΉ. lo μ hi λ μ¬μ©λ κΈ°λ³Έ μ 체 λ°°μ΄λ‘ κ²°μ λμΌ νλ λ°°μ΄μ νμμ§ν©μ μ§μ νκΈ° μν΄ μ¬μ©νλ€. x κ° μ΄λ―Έ array μμ μλ€λ©΄, μ½μ μμΉλ μ΄λ―Έ μ‘΄μ¬νλ μμμ μμ΄ λλ€. (μΌμͺ½μ ν΄λΉν¨.) λ°ν κ°μ΄ array κ° μ΄λ―Έ μ λ ¬λμ΄μλ€λ κ°μ νμ spliceμ 첫 λ²μ§Έ μ λ¬μΈμλ‘ μ¬μ©ν μ μλ€. μΌμͺ½μ array.slice(lo, i)μ v κ° λͺ¨λ v < x μ΄κ³ μ€λ₯Έμͺ½μ array.slice(i, hi)μ v κ° λͺ¨λ v >= x μ΄λλ‘ λ°νλ μ½μ μ§μ iκ° array λ₯Ό λλ‘ λλλ€.
# d3.bisect(array, x[, lo[, hi]])
# d3.bisectRight(array, x[, lo[, hi]])
bisectLeftμ λΉμ·νμ§λ§ array μ μ΄λ―Έ μ‘΄μ¬νλ x μ μ€λ₯Έμͺ½ μ§μ μ μ½μ μ§μ μΌλ‘ λ°ννλ€. μΌμͺ½μ array.slice(lo, i)μ v κ° λͺ¨λ v <= x μ΄κ³ μ€λ₯Έμͺ½μ array.slice(i, hi)μ v κ° λͺ¨λ v > x μ΄λλ‘ λ°νλ μ½μ μ§μ iκ° array λ₯Ό λλ‘ λλλ€.
# d3.bisector(accessor)
μ λ¬μΈμ accessor ν¨μλ₯Ό μ¬μ©ν μ΄λ±λΆ κ°μ²΄μ λ°ννλ€. λ°ν κ°μ²΄μλ bisectLeftμ bisectRightμ μ μ¬ν left
, right
νλ‘νΌν°κ° μλ€. μ΄ λ©μλλ λ¨μν μμ λ°°μ΄μ΄ μλ κ°μ²΄ λ°°μ΄ λΆν μ μ¬μ©ν μ μλ€. μλ₯Ό λ€μ΄ λ€μκ°μ κ°μ²΄ λ°°μ΄μ΄ μλ€λ©΄,
var data = [
{date: new Date(2011, 1, 1), value: 0.5},
{date: new Date(2011, 2, 1), value: 0.6},
{date: new Date(2011, 3, 1), value: 0.7},
{date: new Date(2011, 4, 1), value: 0.8}
];
μ μ ν λΆν ν¨μλ₯Ό μμ±νλ€.
var bisect = d3.bisector(function(d) { return d.date; }).right;
κ·Έλ¦¬κ³ λμ bisect(data, new Date(2011, 1, 2))
λ₯Ό μ μ©ν΄μ μμΈμ μ»λλ€.
# d3.shuffle(array)
FisherβYates shuffleλ₯Ό μ¬μ©ν΄μ μ λ¬μΈμ array μ μμλ₯Ό λλ€νκ² λ§λ λ€.
# d3.first(array[, comparator])
Returns the lowest element in the specified array, as ordered by the specified comparator. If no comparator is specified, d3.ascending is used. This method is similar to d3.min, except you can use an arbitrary comparator, rather than mapping array elements to a numeric value.
# d3.last(array[, comparator])
Returns the highest element in the specified array, as ordered by the specified comparator. If no comparator is specified, d3.ascending is used. This method is similar to d3.max, except you can use an arbitrary comparator, rather than mapping array elements to a numeric value.
μλ°μ€ν¬λ¦½νΈμλ λ°°μ΄ λ§κ³ λ λ²μ© λ°μ΄ν° νμ μΌλ‘ μ°κ΄ λ°°μ΄μ΄ μλ€. μ°κ΄ λ°°μ΄μλ λͺ λͺ λ νλ‘νΌν°λ€μ΄ μκ³ κ°νΉ λ λ¨μν κ°μ²΄μΌ λλ μλ€. μ΄ νμ μ μλ°μμλ map, νμ΄μ¬μμλ dictionaryμ ν΄λΉνλ€. μλ°μ€ν¬λ¦½νΈμ μ°κ΄λ°°μ΄μ ν€(λλ νλ‘νΌν° λͺ )λ‘ μννκΈ° μν νμ€ λ©μΉ΄λμ¦μΌλ‘ forβ¦in loopμ μ§μνμ§λ§ μ λ ¬μ ν μ μμΌλ―λ‘ μ λ ¬μ ν μ μλλ‘ D3κ° μ°κ΄ λ°°μ΄μ νμ€ μμΈ λ°°μ΄λ‘ λ³ννλ λͺκ°μ§ μ°μ°μλ₯Ό μ 곡νλ€.
# d3.keys(object)
μ λ¬μΈμλ‘ λμ΄μ¨ κ°μ²΄(μ°κ΄ λ°°μ΄)μ νλ‘νΌν° λͺ μ κ°μ§ λ°°μ΄μ λ°ννλ€. λ°ν λ°°μ΄μ μ λ ¬λμ§ μμ μνλ€.
# d3.values(object)
μ λ¬μΈμλ‘ λμ΄μ¨ κ°μ²΄(μ°κ΄ λ°°μ΄)μ νλ‘νΌν° κ°μ κ°μ§ λ°°μ΄μ λ°ννλ€. λ°ν λ°°μ΄μ μ λ ¬λμ§ μμ μνλ€.
# d3.entries(object)
μ λ¬μΈμλ‘ λμ΄μ¨ κ°μ²΄(μ°κ΄ λ°°μ΄)μ νλ‘νΌν° λͺ κ³Ό κ°μ κ°μ§ λ°°μ΄μ λ°ννλ€. κ° λ°°μ΄ μμλ {key: "foo", value: 42}μ²λΌ keyμ value μμ±μ κ°μ§ κ°μ²΄λ€. λ°ν λ°°μ΄μ μ λ ¬λμ§ μμ μνλ€.
μλ°μ€ν¬λ¦½νΈμμ μΌλ° κ°μ²΄λ₯Ό mapμΌλ‘ μ¬μ©νκ³ μ νλ©΄, λ΄μ₯ νλ‘νΌν° λͺ
μ΄ ν€λ‘ μ¬μ©λ λ μμμΉ λͺ»ν λμ(unexpected behavior)μ΄ μΌμ΄λ μ μλ€. μλ₯Ό λ€μ΄ object["__proto__"] = 42
λΌκ³ μ§μ ν κ²½μ° μ¬λ¬λΆμ΄ κΈ°λνλ λμμ μΌμ΄λμ§ μμΌλ©°, ν€κ° 맡 μμ μ μλμλμ§λ₯Ό μμ보기 μν΄ μ‘°νλ₯Ό μλν λλ λ§μ°¬κ°μ§λ€. μ¦, μΌλ° κ°μ²΄λ Object prototypeμμ hasOwnProperty λ©μλλ₯Ό μμνκΈ° λλ¬Έμ "hasOwnProperty" in object
λ trueλ₯Ό λ°ννλ€. μ΄λ° λ¬Έμ λ₯Ό νΌνκΈ° μν΄μ ES6μ simple maps and setsλ₯Ό μ μν μνμ΄λ©° μ£Όλ₯ λΈλΌμ°μ λ€μ΄ μ΄ μ½λμ
λ€μ μ§μν λ κΉμ§λ d3.mapμ μ¬μ©νλκ² μ’λ€.
μ£Όμ: ES6μ΄ μ μν mapκ³Όλ λ¬λ¦¬, d3.mapμ μμ§ keyλ₯Ό μν΄μ νλ± λΉκ΅(===, !==)λμ μ λ¬Έμμ΄λ‘ κ°μ λ³ννλ μΌλ° λΉκ΅(==, !=)λ₯Ό μ¬μ©νλ€.
# d3.map([object])
μ κ· λ§΅μ μμ±νλ€. object μ λ¬μΈμλ₯Ό λκΈ°λ©΄ object μ λͺ¨λ μ΄κ±°ν νλ‘νΌν°λ₯Ό 맡μΌλ‘ 볡μ¬νλ€.
# map.has(key)
μ λ¬μΈμ key μ ν΄λΉνλ μμκ° λ§΅μ μμΌλ©΄ trueλ₯Ό λ°ννλ€. keyμ ν΄λΉνλ κ°μ΄ μμΌλ nullμ΄κ±°λ undefinedμΌ μλ μλ€.
# map.get(key)
μ λ¬μΈμ key μ ν΄λΉνλ κ°μ λ°ννλ€. keyμ ν΄λΉνλ μμκ° λ§΅μ μμΌλ©΄ undefinedλ₯Ό λ°ννλ€.
# map.set(key, value)
μ λ¬μΈμ key μ value λ₯Ό μ§μ νκ³ κ·Έ value λ₯Ό λ°ννλ€. 맡μ μ΄λ―Έ λλͺ μ μμκ° μμΌλ©΄, μλ‘μ΄ κ°μΌλ‘ λ체 λλ€.
# map.remove(key)
맡μ μ λ¬μΈμ key μ ν΄λΉνλ μμκ° μμΌλ©΄ μ κ±°νκ³ trueλ₯Ό λ°ννλ€. μμΌλ©΄ μ무μΌλ νμ§ μκ³ falseλ₯Ό λ°ννλ€.
# map.keys()
맡μ λͺ¨λ μμμ keyλ₯Ό λ¬Έμμ΄ λ°°μ΄λ‘ λ°ννλ€. λ°ν keyμ μμλ μμλ‘ κ²°μ λλ€.
# map.values()
맡μ λͺ¨λ μμμ κ°μ λ°°μ΄λ‘ λ°ννλ€. λ°ν κ°μ μμλ μμλ‘ κ²°μ λλ€.
# map.entries()
맡μ λͺ¨λ μμμ ν€-κ° κ°μ²΄λ₯Ό λ°°μ΄λ‘ λ°ννλ€. λ°ν μμλ€μ μμλ μμλ‘ κ²°μ λλ€.
# map.forEach(function)
맡μ κ° μμλ³λ‘ function λ₯Ό νΈμΆνλ€. μ΄ ν¨μλ μμμ keyμ valueλ₯Ό μ λ¬μΈμλ‘ κ°λλ€. function μ this
컨ν
μ€νΈλ ν΄λΉ 맡μ΄λ€. λ°νκ°μ undefinedμ΄λ©° μν μμλ μμλ‘ κ²°μ λλ€.
# d3.split(array[, function])
Splits the specified array into multiple arrays at breakpoints identified by the specified function. If no breakpoint function is specified, the array will be split at any null or undefined values, equivalent to the following function:
function breakpoint(d) {
return d == null;
}
Elements that are identified as breakpoints, as by the function returning a truthy value, will not be included in the returned arrays. (In the future, a more general API might use a breakpoint function that takes two arguments and decides whether to split them, and also gives some indication as to whether to include those two values in the split arraysβ¦)
This method is often used in conjunction with the line shape, such that missing data points are elided; each contiguous slice of the array where the data is defined is rendered as a line segment.
# d3.merge(arrays)
μ λ¬μΈμ arrays λ₯Ό νλμ λ°°μ΄λ‘ ν©μ³μ€λ€. μ΄ λ©μλλ λ°°μ΄ λΉνΈ-μΈ λ©μλ concatκ³Ό λΉμ·νμ§λ§ λ°°μ΄μμ λ°°μ΄μ΄ μλ ννμμ λ μ μ©νλ€λ μ°¨μ΄μ μ΄ μλ€.
# d3.range([start, ]stop[, step])
λ±μ°¨μμ΄μ λ΄μ λ°°μ΄μ μμ±νλ€. νμ΄μ¬μ λΉνΈ-μΈ λ©μλ rangeμ λΉμ·νλ€. μ΄ λ©μλλ λ°°μ΄μ μμΈ κ°μ μ μ κ°λ€μ΄λ μμ΄μ μννκΈ° μν΄μ μ¬μ©νλ€. νμ΄μ¬ rangeμλ λ¬λ¦¬, λΆλμμμ μ λ°λλ‘ μΈν΄μ κ²°κ³Όκ° λ μμ κ°λ₯νμ§λ§ μ λ¬μΈμκ° κΌ μ μμΌ νμλ μλ€. step μ μλ΅νλ©΄ κΈ°λ³Έκ°μ 1μ΄κ³ , start λ₯Ό μλ΅νλ©΄ κΈ°λ³Έκ°μ΄ 0μ΄λ€. stop κ°μ κ²°κ³Όμ ν¬ν¨λμ§ μλλ€. κ²°κ³Όμ μ 체 ννλ [ start , start + step, start + 2 * step , β¦]μ μ«μ λ°°μ΄λ‘ λ°νλλ€. step μ΄ μμλ©΄ λ§μ§λ§ μμλ stop λ³΄λ€ start + i * step λ§νΌ ν¬λ€. step μ΄ μμλ©΄ λ§μ§λ§ μμλ stop λ³΄λ€ start + i * step λ§νΌ μλ€. λ°ν λ°°μ΄μ κ°μ΄ 무νκ°μΌ λλ©΄ 무ν루νλ₯Ό λμ§ μκ³ μλ¬λ₯Ό λμ§λ€.
# d3.permute(array, indexes)
indexs λ°°μ΄μ μ¬μ©ν΄μ array μ μμ΄(permutation)μ λ°ννλ€. λ°ν λ°°μ΄μ indexs λ°°μ΄μ κ° μμΈμ λν ν΄λΉ μμλ₯Ό μμλλ‘ λ΄κ³ μλ€. μλ₯Ό λ€μ΄, permute(["a", "b", "c"], [1, 2, 0])λ ["b", "c", "a"]λ₯Ό λ°ννλ€. μμΈ λ°°μ΄ indexsλ μμ λ°°μ΄μΈ array μ κΈΈμ΄κ° λ€λ₯Ό μ μμΌλ©° μ€λ³΅λκ±°λ μλ΅ κ°λ₯νλ€.
μ΄ λ©μλλ μ λ ¬ μμλ₯Ό μ μ§νλ©΄μ λ°°μ΄μ κ°μ²΄μμ κ°μ μΆμΆνλλ°λ μ¬μ©ν μ μλ€. (μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄ μμΈκ°μ .length
κ³Ό νΉλ³ν κ΄κ³λ₯Ό λ§Ίμ νλ‘νΌν°μΌ λΏμ΄λ€.) μ€μ²© μ νλ¬Όμμ data λ°°μ΄μ μμ±νλ € ν λ μ λ ¬μμλλ‘ λͺ
λͺ
λ κ°μ μΆμΆνλ κΈ°λ₯μ΄ μ μ©νλ€. μλ₯Ό λ€μ΄ ν
μ΄λΈ ννλ‘ μ¬μ μ Minnesota barley yield λ°μ΄ν°μ€ μΌλΆλ₯Ό μΆλ ₯ν μ μλ€.
var cols = ["site", "variety", "yield"];
thead.selectAll('th').data(cols)
.enter().append('th').text(function (d) { return d.toUpperCase(); });
tbody.selectAll('tr').data(yields)
.enter().append('tr').selectAll('td').data(function (row) { return d3.permute(row, cols); })
.enter().append('td').text(function (d) { return d; });
# d3.zip(arraysβ¦)
λ°°μ΄μ λ°°μ΄μ λ°ννλλ°, iλ²μ§Έ λ°°μ΄μ μ λ¬μΈμ arrays κ°κ°μμ iλ²μ§Έ μμμ λ΄κ³ μλ€. λ°ν λ°°μ΄μ arrays μ€ κ°μ₯ 짧μ λ°°μ΄μ κΈΈμ΄λ‘ μ¬λ¨λλ€. arrays λ‘ λ°°μ΄μ΄ νλλ§ μ§μ λλ©΄ λ°ν λ°°μ΄μ μμκ° νλμΈ λ°°μ΄μ΄ λλ€. μ λ¬μΈμκ° μμΌλ©΄ λ°ν λ°°μ΄μ λΉ λ°°μ΄μ΄λ€.
# d3.transpose(matrix)
d3.zip.apply(null, matrix)
μ λμΌνλ€. 2μ°¨μ μ μΉνλ ¬(matrix transpose)λ₯Ό μν΄μ zip μ°μ°μλ₯Ό μ¬μ©νλ€.
λ°°μ΄μ μμλ μ€μ²©(nestring)μ ν΅ν΄μ κ³μΈ΅ νΈλ¦¬κ΅¬μ‘°λ‘ κ·Έλ£Ήμ§μ μ μλ€. μ€μ²©μ SQLμ GROUP BY μ°μ°μμ μ μ¬νμ§λ§ κ·Έλ£Ήνμ΄ μ¬λ¬λ¨κ³ κ°λ₯νκ³ κ²°κ³Όκ° λ¨λ©΄ ν μ΄λΈμ΄ μλ νΈλ¦¬κ΅¬μ‘°λΌλ μ μ΄ λ€λ₯΄λ€. νΈλ¦¬μ λ 벨μ key ν¨μλ‘ μ§μ νλ€. νΈλ¦¬μ μ€κ° λ¨κ³ λ Έλλ keyλ‘ μ λ ¬ν μ μκ³ λ¦¬ν(leaf) λ Έλλ valueμΌλ‘ μ λ ¬ κ°λ₯νλ€. μ΅μ μΈ rollup ν¨μλ ν©μ° ν¨μλ₯Ό μ¬μ©ν 리ν λ Έλλ³λ‘ μμλ€μ μ¨κΈ΄λ€. nest μ°μ°μ κ°μ²΄(d3.nestκ° λ°νν κ°μ²΄)λ μ¬ μ¬μ©κ°λ₯νμ§λ§ μ€μ²©λ λ°μ΄ν° μ°Έμ‘°λ₯Ό μ μ§νμ§ μλλ€.
μλ₯Ό λ€μ΄, 1931~1932λ μ¬μ΄, Minnesotaμ£Ό μ¬λ¬μ§μμ 보리λ°μ λν μ§κ³μλ£λ₯Ό 보μ.
var yields = [{yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
{yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"},
{yield: 27.43, variety: "Manchuria", year: 1931, site: "Morris"}, ...]
μκ°νλ₯Ό μμ½κ² νλ €λ©΄ year, variety μμΌλ‘ μμλ₯Ό μ€μ²©μν€λκ² νΈνλ€.
var nest = d3.nest()
.key(function(d) { return d.year; })
.key(function(d) { return d.variety; })
.entries(yields);
λ€μμ΄ λ°νλ λ°°μ΄μ΄λ€. κ²°κ³Ό λ°°μ΄μ κ° μμλ κ° keyμ ν΄λΉνλ valuesλ₯Ό λμ΄ν ν μμ key-valuesμ΄λ€.
[{key: 1931, values: [
{key: "Manchuria", values: [
{yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
{yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"},
{yield: 27.43, variety: "Manchuria", year: 1931, site: "Morris"}, ...]},
{key: "Glabron", values: [
{yield: 43.07, variety: "Glabron", year: 1931, site: "University Farm"},
{yield: 55.20, variety: "Glabron", year: 1931, site: "Waseca"}, ...]}, ...]},
{key: 1932, values: ...}]
μ΄λ° μ€μ²©λ λͺ¨μμ SVGλ HTMLμμ κ³μΈ΅κ΅¬μ‘° μμ±κ³Ό μνλ₯Ό μ½κ² ν΄μ€λ€.
# d3.nest()
μ κ· nest μ°μ°μλ₯Ό μμ±νλ€. μμ±μμλ key μ§ν©μ΄ λΉμ΄μλ€. key ν¨μλ₯Ό λ±λ‘μνκ³ mapλ entries μ°μ°μλ₯Ό νΈμΆνλ©΄, nest μ°μ°μλ κ·Έλ₯ κ·Έ μ°μ°μμ μ λ ₯ λ°°μ΄μ λ°ννλ€.
# nest.key(function)
μ κ· key function μ λ±λ‘νλ€. key ν¨μλ μ λ ₯ λ°°μ΄μ κ° μμλ³λ‘ νΈμΆλκ³ ν¨μλ λ°λμ μμλ₯Ό κ·Έλ£Ήν νλλ° μ¬μ©ν μλ³ λ¬Έμμ΄μ λ°νν΄μΌ νλ€. κ·Έλμ λλΆλΆ, ν¨μλ μμ μμ μμ yearκ³Ό variety μ κ·Όμμ²λΌ λ¨μν μ κ·Όμλ‘ κ΅¬νλλ€. keyλ λ±λ‘λ λ λ§λ€ λ΄λΆμ keys λ°°μ΄μ λμ νΈμ¬λκ³ mapμ΄λ νλͺ©μ κ²°κ³Όλ¬Όμλ μΆκ° κ³μΈ΅ λ¨κ³κ° μκΈ΄λ€. λ±λ‘λ keyλ₯Ό μ‘°ννκ±°λ μ κ±°νλ κΈ°λ₯μ΄ νμ¬λ μλ€. λ§μ§λ§ λ±λ‘ν keyλ λ©μλ 체μ΄λμ λ€μ λ©μλμμ ν΄λΉ keyλ‘ μ°Έμ‘°λλ€.
# nest.sortKeys(comparator)
μ λ¬μΈμ comparator(d3.descending κ°μ λΉκ΅μ)λ₯Ό μ¬μ©ν΄μ ν΄λΉ keyμμ κ°μ μ λ ¬νλ€. ν΄λΉ keyλ₯Ό μν λΉκ΅μλ₯Ό μ§μ νμ§ μμΌλ©΄ keyκ° λ°νλ μμΉμ μ λ ¬μ undefinedκ° λλ€. μ£Όμν μ μ μ΄ μ°μ°μλ entries μ°μ°μ κ²°κ³Όμλ§ μν₯μ μ€λ€. comparator μΈμμ μκ΄μμ΄ map μ°μ°μκ° λ°νν keyμ λ ¬μ νμ undefinedμ΄λ€.
# nest.sortValues(comparator)
μ λ¬μΈμ comparator μ°μ°μ(d3.descendingκ°μ λΉκ΅μ)λ₯Ό μ΄μ©ν΄μ 리ν μμλ₯Ό μ λ ¬νλ€. μ΄λ nest μ°μ°μλ₯Ό μ μ©νκΈ°μ μ μ λ ₯ λ°°μ΄μ μ λ ¬νλ λμκ³Ό μ μ¬νμ§λ§ λ£Ήνν κ° κ·Έλ£Ήμ ν¬κΈ°κ° μλμ μΌλ‘ μμΌλ―λ‘ μΌλ°μ μΌλ‘λ μ’λ ν¨κ³Όμ μ΄λ€. κ° λΉκ΅λ₯Ό μν comparator λ₯Ό μ§μ νμ§ μμΌλ©΄ μμλ μ λ ₯ λ°°μ΄μ μ λ ¬ μμλ‘ λ°νλλ€. μ΄ μ°μ°μλ map, entires μ°μ°μ λͺ¨λμ μ μ©λλ€.
# nest.rollup(function)
리ν μμ κ·Έλ£Ή λ³λ‘ μ μ©ν rollup function μ μ 곡νλ€. 리ν κ°λ€μ λ°°μ΄μ΄ rollup ν¨μμ λ°ν κ°μΌλ‘ κ΅μ²΄ λλλ°, map μ°μ°μ λ°νκ°μΈ μ°κ΄ λ°°μ΄μ΄λ entries μ°μ°μκ° λ°ννλ κ° μμμ values μμ±μ΄λ κ΄κ³μλ€.
# nest.map(array)
array λ‘ nest μ°μ°μλ₯Ό μ μ©νλ©°, μ°κ΄λ°°μ΄μ λ°ννλ€. λ°νλ μ°κ΄λ°°μ΄μ κ° μμλ 첫 keyν¨μκ° λ°ννλ key κ°μ λΆν©νλ€. μμκ°μ λ±λ‘λ key ν¨μμ μμ κ΄λ ¨μλ€. keyν¨μκ° μ¬λ¬κ°λ©΄, μμκ°μ μ€μ²©λ λ€λ₯Έ μ°κ΄ λ°°μ΄μ΄λ€. κ·Έλ μ§ μμΌλ©΄ μμκ°μ 첫λ²μ§Έ key ν¨μκ° λ°νν key κ°μΌλ‘ μ λ ₯ array μ μμλ₯Ό νν°λ§ν λ°°μ΄μ΄λ€.
# nest.entries(array)
array λ‘ nest μ°μ°μλ₯Ό μ μ©νλ©°, keyμ values μμλ₯Ό κ°μ§ λ°°μ΄μ λ°ννλ€. μ΄λ‘ μ μΌλ‘ mapκ° λ°ννλ μ°κ΄λ°°μ΄μ d3.entriesλ₯Ό μ μ©νλκ²κ³Ό μ μ¬νμ§λ§ 첫λ¨κ³ λ§μ΄ μλλΌ κ³μΈ΅ λ¨κ³λ₯Ό νκ³ λͺ¨λ μ μ©νλ€λ μ μ΄ λ€λ₯΄λ€. λ°ν λ°°μ΄μ κ° μμλ 첫λ²μ§Έ key ν¨μκ° λ°ννλ key κ°μ λΆν©νλ€. μμκ°μ λ±λ‘λ key ν¨μμ μμ κ΄λ ¨μ΄ μλ€. μ¦, keyν¨μκ° μ¬λ¬κ°λ©΄, κ·Έ μμκ°μ λ€μ λ³λμ μ€μ²© λ°°μ΄μ΄μ§λ§, κ·Έλ μ§ μμΌλ©΄ μμκ°μ 첫λ²μ§Έ key ν¨μκ° λ°νν key κ°μΌλ‘ μ λ ₯ array μ μμλ₯Ό νν°λ§ν λ°°μ΄μ΄λ€.