Quantitative Scales - zziuni/d3 GitHub Wiki
Wiki βΈ API Reference βΈ Scales βΈ Quantitative Scales
(μμμ£Ό) Scaleμ κ°μ΄ μΌμ νκ² μ»€μ§κ³ μμμ§κ² νλ λΉμ¨μΈ 'μ²λ'μ μλ―Ένλ€. λλλ‘ κ°μ²΄λ 'scale', μλ―Έ μ€λͺ μ 'μ€μΌμΌ'μ μ¬μ©νλ€.
Scaleμ μ λ ₯κ°μ μ μμκ³Ό μΆλ ₯κ°μ μΉμλ₯Ό 맀ννλ ν¨μλ€. **μ λμ μ²λ(Quantitative Scales)**μ μ λ ₯κ°μΈ μ μμμ΄ μ€μ μμΉκ°μ΄λ λ μ§ μ§ν© μ²λΌ μ°μλ κ°μ΄κ³ **μμ΄ μ²λ(Ordinal Scale)**μ μ λ ₯ μ μμμ΄ μ΄λ¦μ΄λ λΆλ₯λͺ κ°μ λΆλ¦¬λ κ°μ΄λ€. μ€μΌμΌμ D3μμ νμ μ¬μ© μμλ μλλ©° μ νΈνλ μμ λ§μ μμμ΄ μλ€λ©΄ μ¬μ©νμ§ μμλ λλ€. νμ§λ§, μ€μΌμΌμ μ¬μ©νλ©΄ λ°μ΄ν°μ ν¬κΈ°λ₯Ό μκ°μ μΈ ννμΌλ‘ 맀ννλ μ½λλ₯Ό λλλλ‘ κ°λ¨νκ² λ§λ€ μ μλ€.
d3.scale.linearλ scale κ°μ²΄λ₯Ό λ°ννλλ°, μ΄λ° scale κ°μ²΄λ κ°μ²΄μ΄λ©΄μ ν¨μμ΄λ€. ν¨μμ΄λ―λ‘ μΌλ° ν¨μμ²λΌ scaleλ₯Ό νΈμΆ ν μ μκ³ κ°μ²΄μ΄κΈ°λ ν΄μ μ€μΌμΌμ λ³κ²½νλ νμ₯ λ©μλκ° μλ€. D3μ λ€λ₯Έ ν΄λμ€λ€ μ²λΌ scaleμ λ©μλ μ²΄μΈ ν¨ν΄μ λ°λΌμ μΈν°(setter) μνμ νλ λ©μλκ° scale μμ μ λ°ννλ€. μ΄λ₯Ό ν΅ν΄μ νΈμΆ κ΅¬λ¬Έμ΄ κ°κ²°ν΄μ§λλ‘ μ¬λ¬κ°μ μΈν° μ¬μ©μ΄ κ°λ₯νλ€.
μ ν μ€μΌμΌμ κ°μ₯ μΌλ°μ μΈ μ²λμ΄λ€. μ°μμ μΈ μ μμμ μ°μμ μΈ μΉμμΌλ‘ 맀ννκΈ°μ μ’μ μ νμ΄λ€. μ΄ λ§€νμ μ ν 맀νμ΄λ€. μΆλ ₯ λ²μκ° y λ μ λ ₯ λ²μ κ° x μ κ΄ν μ ν ν¨μ y = mx + b λ‘ νμν μ μλ€. μΌλ°μ μΌλ‘ μ μμλ μκ°ννκΈ°λ₯Ό μνλ λ°μ΄ν°μ ν¬κΈ°λ€. μλ₯Ό λ€λ©΄ νλ³Έ μΈκ΅¬μμ νμλ€ ν€(λ¨μκ° λ―Έν°)κ° λ μ μλ€. μΉμμ μΌλ°μ μΌλ‘ μνλ μκ°ν μΆλ ₯κ°μ ν¬κΈ°μ΄λ€. μλ₯Ό λ€λ©΄ λ°(histogram) μ°¨νΈ μμ λ§λ λμ΄(λ¨μκ° ν½μ )κ° μΉμμ ν΄λΉνλ€.
# d3.scale.linear()
μ μμμ΄ [0,1]μ΄κ³ μΉμμ΄ [0,1]μΈ μ ν μ€μΌμΌμ μλ‘ μμ±νλ€. κ·Έλ¬λ―λ‘ κΈ°λ³Έ μ ν μ€μΌμΌμ νλ±ν¨μμ κ°λ€. μλ₯Ό λ€μ΄, linear(0.5)λ 0.5λ₯Ό λ°ννλ€.
# linear(x)
μ μμμμ x κ°μ μ£Όλ©΄ μΉμμμ μμνλ κ°μ λ°ννλ€.
# linear.invert(y)
μΉμλ΄μ κ° y μ λν μ μμ x μ κ°μ λ°ννλ€. μ΄ λ©μλλ μΉμμμ μ μμμΌλ‘μ μ 맀νμ λνλΈλ€. μΉμμ μ ν¨ν κ° y μ λν΄μ linear(linear.invert( y ))λ y μ κ°λ€. κ·Έλ¦¬κ³ μ μμμ μ ν¨ν κ° x μ λν΄μ linear.invert(linear( x ))λ x μ κ°λ€. μ΄μ²λΌ μ μμκ³Ό μΉμμ μλ‘ λ°κΎΌ μλ‘μ΄ μ²λμ λΉλν΄μ λ°λλ‘ λμνλ μ°μ°μλ₯Ό μμ±ν μ μλ€. λ°λλ‘ λμνλ μ°μ°μλ μνΈμμ©μ νΉν μ μ©νλ°, λ§μ°μ€κ° μμΉν ν½μ μ κ΄λ ¨λ μ μμμ κ°μ λμ΄λ΄λλ° μ¬μ©νλ€.
μ£Όμ: invert() μ°μ°μλ μ«μλ‘ λ μΉμλ§ μ§μνλ€! μ§λ ¬ν μ κ³±λΌλ―Έν° t λ₯Ό μΉμμ κ°κ³Ό 맀ννλλ° μ¬μ©νλ d3.interpolate λ μ¬μ©μ μ§μ μΈν°ν΄λ μ΄ν°μ μ§μμΌλ‘ D3λ μΉμμ λͺ¨λ νμ μ λ μ μλ€. λ°λΌμ μΉμμ μμ, λ¬Έμμ΄ λΏ μλλΌ μμμ κ°μ²΄λ κ°λ₯νλ€. μμμ νμ μ μλ³΄κ° ν μ¬μ£Όλ μμΌλ―λ‘ invert μ°μ°μλ νμ¬ μ«μν μΉμλ§ μ§μνλ€.
# linear.domain([numbers])
numbers λ₯Ό μΈμλ‘ λκΈ°λ©΄ μ§μ ν μ«μ λ°°μ΄λ‘ μ€μΌμΌμ μ μμλ₯Ό μ§μ νλ€. λ°°μ΄μλ λ κ° μ΄μμ μ«μκ° μμ΄μΌ νλ€. μΈμλ‘ λκΈ΄ λ°°μ΄μ μμκ° μ«μκ° μλλ©΄, μ«μλ‘ λ³κ²½νλ€. μ΄ λ³κ²½μ μ€μΌμΌμ΄ νΈμΆλ λ λΉμ·νκ² μΌμ΄λλ€. κ·Έλ¬λ―λ‘ μ«μλ‘ λ³νμ΄ κ°λ₯ν μλ°μ€ν¬λ¦½νΈμ date κ°μ²΄ κ°μ νμ μ μΈμ½λ©νκΈ° μν΄μ μ ν μ€μΌμΌμ μ¬μ©ν μλ μλ€. κ·Έλ¬λ μ΄ λͺ©μ μ΄λΌλ©΄ d3.time.scaleλ₯Ό μ¬μ©νλ κ² λ νΈνλ€. (μ¬λ¬λΆμ valueOfλ₯Ό μ΄μ©ν΄μ λ³ν κ°λ₯ν μ«μν κ°μ²΄λ₯Ό ꡬνν μ μλ€. λ§ν¬ μ°Έμ‘°.) numbers μΈμ μμ΄ νΈμΆνλ©΄ νμ¬ μ μμμ λ°ννλ€.
μ ν μ€μΌμΌμ΄ μΌλ°μ μΌλ‘ μ μμμΌλ‘ λκ°μ μ«μ κ°μ κ°μ§κΈ΄ νμ§λ§, λ€μ ν μ€μΌμΌ(polylinear scale)λ₯Ό μν΄μλ λκ° μ΄μμ κ°μ μ§μ ν μ μλ€. μ΄λ° κ²½μ°, μΉμμ κ°μ μλ μ μμκ³Ό κ°μμΌ νλ€. λ€μ ν μ€μΌμΌμ μ°μμ μΈ μ μμκ³Ό μΉμμ λΆν ν΄μ μ¬λ¬κ°μ λΆμ°μ μ ν μ€μΌμΌμ νννλ€. μ΄ λ°©μμ μ λμ μ²λ(quantitative scale)μ λΆν ν΄μ μ μνκ³ μ ν λ νΉν μ μ©νλ€. μλ₯Ό λ€μ΄, λ€μμ μμ κ°μ ν°μκ³Ό λΉ¨κ°μ μ¬μ΄λ₯Ό 보κ°νκ³ , μμ κ°μ ν°μκ³Ό μ΄λ‘μ μ¬μ΄λ₯Ό 보κ°νλ κ²½μ°λ€.
var color = d3.scale.linear()
.domain([-1, 0, 1])
.range(["red", "white", "green"]);
color(-.5) μ κ²°κ³Ό κ°μ "#ff8080"μ΄κ³ , color(.5)μ κ²°κ³Όκ°μ "#80c080"μ΄λ€. λ΄λΆμ μΌλ‘ λ€μ ν μ€μΌμΌμ μ£Όμ΄μ§ μ μμ κ°μΌλ‘ κ΄λ ¨λ μΆλ ₯ μΈν°ν΄λ μ΄ν°λ₯Ό μν λ°μ΄λ리 κ²μμ μννλ€. μ μμκ³Ό μΉμ λͺ¨λμ κ°μ μ’λ λ°λ³΅ν΄μ λ리면, μ μμμ ν ꡬμ(chunk)μ΄ μΉμμμ μ§μ λ νλμ κ°(constant)μΌλ‘ κ°μ ν μλ μλ€.
# linear.range([values])
values μΈμλ₯Ό μ§μ νλ©΄, κ·Έ λ°°μ΄ κ°μΌλ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. μ λ¬μΈμλ‘ λ°λ λ°°μ΄μ μ μμκ³Ό κ°μλ₯Ό λ§μΆμ΄μΌ νλ―λ‘, λ κ° μ΄μμ κ°μ΄ μμ΄μΌ νλ€. λ°°μ΄μ μμλ κΌ μ«μμ¬μΌ ν νμλ μλ€. κ·Όλ³Έμ μΌλ‘ interpolatorμ μ§μμ λ°λ λͺ¨λ κ°μ΄ λμνλ€. νμ§λ§ invert μ°μ°μλ₯Ό μν΄μλ λ°λμ μ«μν μΉμμ΄μ¬μΌ νλ€. values λ₯Ό μ§μ νμ§ μμΌλ©΄, μ€μΌμΌμ νμ¬ μΉμμ λ°ννλ€.
# linear.rangeRound(values)
μ§μ ν μ λ¬μΈμ values λ°°μ΄λ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. λ¨, μ€μΌμΌμ μ¬μ©ν μΈν°ν΄λ μ΄ν°λ‘ d3.interpolateRoundλ₯Ό μ§μ νλ€.μ΄λ μν°μ리μμ±μ νμ μ μ§μ°λ κ²½μ°μ²λΌ μ€μΌμΌμ μΉμμ΄ μ νν μ μμ¬μΌ ν λ μ μ©νλ€. λν μ€μΌμΌ μ μ© νμ μλμΌλ‘ μΉμμ λ°μ¬λ¦Όν λλ μ¬μ©ν μ μλ€.
# linear.interpolate([factory])
μ λ¬μΈμ factory λ₯Ό λκΈ°λ©΄ μ€μΌμΌμ μΉμμ μν μΈν°ν΄λ μ΄ν°λ‘ factory λ₯Ό μ§μ νλ€. κΈ°λ³Έ μΈν°ν΄λ μ΄ν°λ d3.interpolateμ΄λ©°, μ΄λ₯Ό [0,1] λ²μμ μ μμ νλΌλ―Έλ *t λ₯Ό μΉμμ κ΄λ ¨ κ°μΌλ‘ 맀ννλλ° μ¬μ©νλ€. μ¦ μΈν°ν΄λ μ΄ν° ν©ν 리 ν¨μλ μΉμμ κ° μΈμ κ°λ€μ μν΄ κ°μ 보μ νλ μΈν°ν΄λ μ΄ν° μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄μ μ¬μ©λλ€.factory μΈμλ₯Ό μ§μ νμ§ μμΌλ©΄, ν΄λΉ μ€μΌμΌμ μΈν°ν΄λ μ΄ν° ν©ν 리λ₯Ό λ°ννλ€.
# linear.clamp([boolean])
μ§μ ν boolean μ λ°λΌμ μΉμ λ²μλ₯Ό νμ νκ±°λ νμ§μλλ€. κΈ°λ³Έκ°μ μΉμ λ²μ νμ μ νμ§ μλλ€. (boolean = false) μΌλ°μ μΌλ‘ μ μμ λ²μ λ°μ κ°μ΄ μ€μΌμΌλ‘ μ λ¬λλ©΄, κ·Έ μ€μΌμΌμ μ ν μΈμ½λ²(linear extrapolation)μ ν΅ν΄μ μΉμ λ°κΉ₯μͺ½μ κ°μ λ°ννλ€. μλ₯Ό λ€μ΄, μ μμκ³Ό μΉμμ΄ λͺ¨λ [0,1]μΈ κΈ°λ³Έ μ€μΌμΌμ 2λ₯Ό μ λ ₯κ°μΌλ‘ λ£μΌλ©΄ μΆλ ₯κ°λ 2κ° λλ€. λ²μλ₯Ό νμ νλ©΄(booleanμ΄ trueμ΄λ©΄) μ κ·νλ μ μμ νλΌλ―Έν° t μ΄ μΉμ [0,1]λ‘ κ³ μ λλ€. μ¦, μ€μΌμΌμ λ°ν κ°μ μΈμ λ κ·Έ μΉμ μμ μλ€. boolean μ μ§μ νμ§ μμΌλ©΄, μΉμμ λ²μλ₯Ό νμ νκ³ μλμ§ μλμ§λ₯Ό λ°ννλ€.
# linear.nice()
μ μμμ κΉλν λ°μ¬λ¦Ό κ°μΌλ‘ μμνκ³ λλλλ‘ νμ₯νλ€. μ΄ λ©μλλ μ€μΌμΌμ μ μμμ μμ ν΄μ κ°μ₯ κ·Όμ ν λ°μ¬λ¦Ό κ°μΌλ‘ μ μμμ κ²½κ³λ₯Ό νμ₯νλ€. λ°μ¬λ¦Ό κ°μ μ νλλ 곡μ exp(round(log( dx )) - 1) μ dx μ μμ‘΄νλ€. μ΄ λ©μλλ μ μμμ λ°μ΄ν°μμ κ°μ Έμ€λλ° κ·Έ λ°μ΄ν°κ° μ μ μ λ κ°μ΄ μλ λ μ μ©νλ€. μλ₯Ό λ€μ΄. μ μμμ΄ [0.20147987687960267, 0.996679553296417]λΌλ©΄ nice λ©μλλ₯Ό ν΅ν κΉλν μ μμμ [0.2, 1]μ΄λ€. μ μμμ κ°μ΄ λ κ° μ΄μμ΄λ©΄, niceλ 첫 κ°κ³Ό λ§μ§λ§ κ°λ§ μν₯μ μ€λ€.
# linear.ticks(count)
ν΄λΉ μ€μΌμΌμ μ λ ₯ μ μμμμ λλ΅ count μ λ§νΌμ λνκ°λ€μ λ°ννλ€. λ°νλλ κ΅¬λΆ κ°λ€μ μ¬λμ΄ μ½κΈ° μ’μ 10λ°°μ κ°μΌλ‘ κ³ λ₯΄κ² λ±κ°κ²©μΌλ‘ λΆν¬ν΄ μκ³ , μ μμ νμ₯μλ μμ νλ€. μ μμμ ꡬλΆνλ λν ꡬλΆκ°μ μκ°νλ λ°μ΄ν°μμ μ°Έμ‘°μ© λΌμΈμ΄λ κ΅¬λΆ λ§μ»€λ₯Ό 보μ¬μ£Όλλ° μ¬μ©λλ€. μ λ¬μΈμμΈ count λ λ¨μ μ°Έμ‘°κ°μΌλ‘, μ€μΌμΌμ μ μμμ κ·Όκ±°λ‘ count λ³΄λ€ μ’λ λ§κ±°λ μ μ κ°μ λ°ννλ€.
# linear.tickFormat(count)
μΆλ ₯μ© κ΅¬λΆμ(tick) κ°μΌλ‘ μ¬μ©ν μ μ ν number format ν¨μλ₯Ό λ°ννλ€. μ λ¬μΈμ count λ ꡬλΆκ°μ μμ±νκΈ° μν΄μ μ¬μ©λλ count μ κ°μ κ°μ μ¬μ©ν΄μΌ νλ€. ꡬλΆμ μΆλ ₯μ μν΄μ κΌ μ€μΌμΌ λ΄μ₯ ꡬλΆμ ν¬λ§·ν°μΈ μ΄ λ©μλλ₯Ό μ¬μ©ν νμλ μμ§λ§, μ΄ λ©μλλ μ΄λ―Έ μ§μ λ ꡬλΆμ κ°κ²©μ κΈ°λ°ν΄μ κ΄λ ¨ μ νλλ₯Ό μλμΌλ‘ κ³μ°νλ€.
# linear.copy()
ν΄λΉ μ ν μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.
νλ± μ€μΌμΌμ μ μμκ³Ό μΉμμ΄ λμΌν μ ν μ€μΌμΌμ νΉλ³ν μΌμ΄μ€λ€. μ΄ μ€μΌμΌμ invert λ©μλλ λͺ¨λ νλ±ν¨μλ€. μ΄ μ€μΌμΌμ axis and brush μ»΄ν¬λνΈμ ν¨κ» κ²°ν©ν΄μ ν½μ μ’ν μμ ν λ μ μ©νλ€.
# d3.scale.identity()
κΈ°λ³Έ μ μμκ³Ό μΉμμ [0, 1]λ‘ νλ νλ± μ€μΌμΌμ μλ‘ μμ±νλ€. νλ± μ€μΌμΌμ νλ± ν¨μλ‘μ νμ λλ±νλ€.
# identity(x)
# identity.invert(x)
μ£Όμ΄μ§ xλ₯Ό λ°ννλ€.
# identity.domain([numbers])
# identity.range([numbers])
numbers μΈμλ₯Ό μ§μ νλ©΄, κ·Έ λ°°μ΄μ μ«μλ‘ μ μμ(domain)κ³Ό μΉμ(range)μ μ§μ νλ€. μ£Όμ΄μ§ λ°°μ΄μ μμκ° μ«μκ° μλλ©΄ μ«μλ‘ κ°μ¬ λ³κ²½μ νλ€. μ΄ κ°μ λ³κ²½μ μ€μΌμΌμ΄ νΈμΆ λ λμ λΉμ·κ² μΌμ΄λλ€. μ«μλ₯Ό μ§μ νμ§ μμΌλ©΄, νμ¬ μ μμμ λ°ννλ€. (μΉμλ λμΌνλ€.)
# identity.ticks(count)
ν΄λΉ μ€μΌμΌμ μ λ ₯μ μμμμ λλ΅ count μ λ§νΌμ λνκ°λ€μ λ°ννλ€. λ°νλλ κ΅¬λΆ κ°λ€μ μ¬λλ€μ΄ μ½κΈ° μ’μ κ°(10μ λ°°μλ€ μ²λΌ)μΌλ‘ λ±κ°κ²©μΌλ‘ κ³ λ₯΄κ² λΆν¬ν΄μκ³ , μ μμ νμ₯μλ μμ νλ€.μ μμμ ꡬλΆνλ λν ꡬλΆκ°μ μκ°νλ λ°μ΄ν°μμ μ°Έμ‘° λΌμΈμ΄λ κ΅¬λΆ λ§μ»€λ₯Ό 보μ¬μ£Όλλ° μ¬μ©λλ€. μ λ¬μΈμμΈ countλ λ¨μ μ°Έμ‘°κ°μ΄λ€. μ€μΌμΌμ μ μμμ κ·Όκ±°λ‘ μ’λ λ§κ±°λ μ μ κ°μ λ°ννλ€.
# identity.tickFormat(count)
μΆλ ₯μ© κ΅¬λΆμ(tick) κ°μΌλ‘ μ¬μ©ν μ μ ν number format ν¨μλ₯Ό λ°ννλ€. μ λ¬μΈμ count λ ꡬλΆκ°μ μμ±νκΈ° μν΄μ μ¬μ©λλ countκ³Ό κ°μ κ°μ μ¬μ©ν΄μΌ νλ€. μ€μΌμΌ λ΄μ₯ tick formatμ μ¬μ©ν νμλ μμ§λ§, ꡬλΆκ° μ¬μ΄μ κ³ μ λ κ°κ²© κΈ°λ°μ κ΄λ ¨ μ νλλ₯Ό μλμΌλ‘ κ³μ°νλ€.
# identity.copy()
ν΄λΉ μ ν μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€
μ κ³± μ€μΌμΌμ μ ν μ€μΌμΌκ³Ό λΉμ·νμ§λ§, μΉμμ κ³μ°νκΈ° μ μ μ μμμ μ§μ μ νμ μ μ©νλ€λ μ¬μ€μ΄ λ€λ₯΄λ€. μΉμ κ° y λ‘ λ§€νμ μ μμ κ° x μ μ§μ ν¨μλ‘ ννλ μ μλ€. y = mx^k + b. k κ° μ§μκ°μ΄λ€. μ κ³± μ€μΌμΌμ μ μμ κ°μ -1μ κ³±ν΄μ μμ κ°λ μ§μνλ€. κ·Έλ¬λ©΄ μΉμ κ°μλ -1μ κ³±νλ€.
# d3.scale.sqrt()
μ μμκ³Ό μΉμμ΄ [0,1]μ΄κ³ μ§μκ° 0.5(1/2)μΈ μ κ³± μ€μΌμΌμ μμ±νλ€. μ΄ λ©μλλ λ€μ ννμ μΆμ½νμ΄λ€.
d3.scale.pow().exponent(.5)
λ°νλλ μ€μΌμΌμ λ¨μΌ μΈμλ‘ μ μμμ ν κ°μΈ x λ₯Ό λ°λ ν¨μλ€. μ΄ ν¨μλ μ λ ₯κ°μ μμνλ μΉμμ κ°μ λ°ννλ€. μ΄μ²λΌ μ΄ μ€μΌμΌμ μ«μλ₯Ό μν sqrtμ λμΌνλ€. μλ₯Ό λ€μ΄ sqrt(0.25)λ 0.5λ₯Ό λ°ννλ€.
# d3.scale.pow()
μ μμκ³Ό μΉμμ΄ [0,1]μ΄κ³ μ§μκ° 1μΈ μ κ³± μ€μΌμΌμ μμ±νλ€. μ΄ κΈ°λ³Έ μ κ³± μ€μΌμΌμ μ«μλ₯Ό μν νλ± ν¨μμ λμΌνλ€. μλ₯Ό λ€μ΄. pow(0.5)μ 0.5λ₯Ό λ°ννλ€.
# pow(x)
μ μμμ x κ°μ μ£Όλ©΄, μ΄μ μμνλ μΉμμ κ°μ λ°ννλ€.
# pow.invert(y)
μΉμμ κ° y μ μμνλ μ μμ κ° x λ₯Ό λ°ννλ€. μ΄ λ©μλλ μΉμμ μ μμμΌλ‘ μ 맀ννλ€. μΉμμ μ ν¨ν κ° y μ λν΄μ pow(pow.invert( y ))λ y μ κ°λ€. μ μμμ μ μν κ° x μ λν΄μ pow.invert(pow( x ))λ x μ κ°λ€. λμΌνκ² μ μμκ³Ό μΉμμ λ€λ°κΎΌ μλ‘μ΄ μ€μΌμΌμ λΉλν¨μΌλ‘ invert μ°μ°μλ₯Ό μμ±ν μ μλ€. invert μ°μ°μλ λ§μ°μ€ μμΉμ ν½μ κ°μΌλ‘ μ°κ΄λ μ μμ κ°μ μ°Ύλ μνΈμμ©μ ꡬννλλ° μ μ©νλ€.
μ£Όμ: invert μ°μ°μλ μΉμμ΄ μ«μμΈ κ²½μ°λ§ μ§μνλ€! μ§λ ¬ν μ κ³±λΌλ―Έν° t λ₯Ό μΉμμ κ°κ³Ό 맀ννλλ° μ¬μ©νλ d3.interpolate λ μ¬μ©μ μ§μ μΈν°ν΄λ μ΄ν°μ μ§μμΌλ‘ D3λ μΉμμ λͺ¨λ νμ μ λ μ μλ€. λ°λΌμ μΉμμ μμ, λ¬Έμμ΄ λΏ μλλΌ μμμ κ°μ²΄λ κ°λ₯νλ€. νμ§λ§ μμμ νμ μ "μ보κ°(uninterpolate)" ν μ¬μ£Όλ μμΌλ―λ‘ invert μ°μ°μλ νμ¬ μ«μν μΉμλ§ μ§μνλ€.
# pow.domain([numbers])
μ λ¬μΈμ numbers λ₯Ό μ§μ νλ©΄ μ§μ ν μ«μ λ°°μ΄λ‘ μ€μΌμΌμ μ μμμ μ§μ νλ€. μΈμ λ°°μ΄μ λ κ° μ΄μμ μ«μκ° μμ΄μΌ νλ€. λ°°μ΄μ μμκ° μ«μκ° μλλ©΄ κ°μ λ‘ μ«μμ νλ€. μ΄ κ°μ λ³νμ μ΄ μ€μΌμΌμ νΈμΆν λλ λΉμ·νκ² λ°μνλ€.μ΄μ κ°μ΄ μ κ³± μ€μΌμΌμ μ«μλ‘ λ³νλ μ μλ λͺ¨λ νμ μ μΈμ½λ©νκΈ° μν΄μ μ¬μ©λ μμλ€. numbersλ₯Ό μ§μ νμ§ μμΌλ©΄ μ€μΌμΌμ νμ¬ μ μμμ λ°ννλ€.
μ ν μ€μΌμΌμ²λΌ, ( linear.domain μ°Έμ‘° ) μ κ³± μ€μΌμΌλ μ μμκ³Ό μΉμμ μ§μ ν λ λ κ° μ΄μμ κ°μ μ¬μ©ν μ μλ€. μ΄μ²λΌ κ²°κ³Όλ λ€μ¬κ³± μ€μΌμΌ(polypower scale)μ΄λ€.
# pow.range([values])
values μΈμλ₯Ό μ§μ νλ©΄, κ·Έ λ°°μ΄ κ°μΌλ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. μ λ¬μΈμλ‘ λ°λ λ°°μ΄μ μ μμκ³Ό κ°μλ₯Ό λ§μΆμ΄μΌ νλ―λ‘, λ κ° μ΄μμ κ°μ΄ μμ΄μΌ νλ€. λ°°μ΄μ μμλ κΌ μ«μμ¬μΌ ν νμλ μλ€. κ·Όλ³Έμ μΌλ‘ interpolatorμ μ§μμ λ°λ λͺ¨λ κ°μ΄ λμνλ€. νμ§λ§ invert μ°μ°μλ₯Ό μν΄μλ λ°λμ μ«μν μΉμμ΄μ¬μΌ νλ€. values λ₯Ό μ§μ νμ§ μμΌλ©΄, μ€μΌμΌμ νμ¬ μΉμμ λ°ννλ€.
# pow.rangeRound(values)
μ§μ ν μ λ¬μΈμ values λ°°μ΄λ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. λ¨, μ€μΌμΌμ μ¬μ©ν μΈν°ν΄λ μ΄ν°λ‘ d3.interpolateRoundλ₯Ό μ§μ νλ€.μ΄λ μν°μ리μμ±μ νμ μ μ§μ°λ κ²½μ°μ²λΌ μ€μΌμΌμ μΉμμ΄ μ νν μ μμ¬μΌ ν λ μ μ©νλ€. λν μ€μΌμΌ μ μ© νμ μλμΌλ‘ μΉμμ λ°μ¬λ¦Όν λλ μ¬μ©ν μ μλ€.
# pow.exponent([k])
μ λ¬μΈμ kλ₯Ό μ§μ νλ©΄, νμ¬ μ§μκ°μ λ₯μ΄μ΄λ€. k λ₯Ό μ§μ νμ§ μμΌλ©΄ νμ¬ μ§μκ°μ λ°ννλ€. κΈ°λ³Έκ°μ 1μ΄λ€.
# pow.interpolate([factory])
μ λ¬μΈμ factory λ₯Ό λκΈ°λ©΄ μ€μΌμΌμ μΉμμ μν μΈν°ν΄λ μ΄ν°λ‘ factory λ₯Ό μ§μ νλ€. κΈ°λ³Έ μΈν°ν΄λ μ΄ν°λ d3.interpolateμ΄λ©°, μ΄λ₯Ό [0,1] λ²μμ μ μμ νλΌλ―Έλ *t λ₯Ό μΉμμ κ΄λ ¨ κ°μΌλ‘ 맀ννλλ° μ¬μ©νλ€. μ¦ μΈν°ν΄λ μ΄ν° ν©ν 리 ν¨μλ μΉμμ κ° μΈμ κ°λ€μ μν΄ κ°μ 보μ νλ μΈν°ν΄λ μ΄ν° μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄μ μ¬μ©λλ€.factory μΈμλ₯Ό μ§μ νμ§ μμΌλ©΄, ν΄λΉ μ€μΌμΌμ μΈν°ν΄λ μ΄ν° ν©ν 리λ₯Ό λ°ννλ€.
# pow.clamp([boolean])
μ§μ ν boolean μ λ°λΌμ μΉμ λ²μλ₯Ό νμ νκ±°λ νμ§μλλ€. κΈ°λ³Έκ°μ μΉμ λ²μ νμ μ νμ§ μλλ€. (boolean = false) μΌλ°μ μΌλ‘ μ μμ λ²μ λ°μ κ°μ΄ μ€μΌμΌλ‘ μ λ¬λλ©΄, κ·Έ μ€μΌμΌμ μ ν μΈμ½λ²(linear extrapolation)μ ν΅ν΄μ μΉμ λ°κΉ₯μͺ½μ κ°μ λ°ννλ€. μλ₯Ό λ€μ΄, μ μμκ³Ό μΉμμ΄ λͺ¨λ [0,1]μΈ κΈ°λ³Έ μ€μΌμΌμ 2λ₯Ό μ λ ₯κ°μΌλ‘ λ£μΌλ©΄ μΆλ ₯κ°λ 2κ° λλ€. λ²μλ₯Ό νμ νλ©΄(booleanμ΄ trueμ΄λ©΄) μ κ·νλ μ μμ νλΌλ―Έν° t μ΄ μΉμ [0,1]λ‘ κ³ μ λλ€. μ¦, μ€μΌμΌμ λ°ν κ°μ μΈμ λ κ·Έ μΉμ μμ μλ€. boolean μ μ§μ νμ§ μμΌλ©΄, μΉμμ λ²μλ₯Ό νμ νκ³ μλμ§ μλμ§λ₯Ό λ°ννλ€.
# pow.nice()
μ μμμ κΉλν λ°μ¬λ¦Ό κ°μΌλ‘ μμνκ³ λλλλ‘ νμ₯νλ€. μ΄ λ©μλλ μ€μΌμΌμ μ μμμ μμ ν΄μ κ°μ₯ κ·Όμ ν λ°μ¬λ¦Ό κ°μΌλ‘ μ μμμ κ²½κ³λ₯Ό νμ₯νλ€. λ°μ¬λ¦Ό κ°μ μ νλλ 곡μ exp(round(log( dx )) - 1) μ dx μ μμ‘΄νλ€. μ΄ λ©μλλ μ μμμ λ°μ΄ν°μμ κ°μ Έμ€λλ° κ·Έ λ°μ΄ν°κ° μ μ μ λ κ°μ΄ μλ λ μ μ©νλ€. μλ₯Ό λ€μ΄. μ μμμ΄ [0.20147987687960267, 0.996679553296417]λΌλ©΄ nice λ©μλλ₯Ό ν΅ν κΉλν μ μμμ [0.2, 1]μ΄λ€. μ μμμ κ°μ΄ λ κ° μ΄μμ΄λ©΄, niceλ 첫 κ°κ³Ό λ§μ§λ§ κ°λ§ μν₯μ μ€λ€.
# pow.ticks([count])
ν΄λΉ μ€μΌμΌμ μ λ ₯ μ μμμμ λλ΅ count μ λ§νΌμ λνκ°λ€μ λ°ννλ€. λ°νλλ κ΅¬λΆ κ°λ€μ μ¬λμ΄ μ½κΈ° μ’μ 10λ°°μ κ°μΌλ‘ κ³ λ₯΄κ² λ±κ°κ²©μΌλ‘ λΆν¬ν΄ μκ³ , μ μμ νμ₯μλ μμ νλ€. μ μμμ ꡬλΆνλ λν ꡬλΆκ°μ μκ°νλ λ°μ΄ν°μμ μ°Έμ‘°μ© λΌμΈμ΄λ κ΅¬λΆ λ§μ»€λ₯Ό 보μ¬μ£Όλλ° μ¬μ©λλ€. μ λ¬μΈμμΈ count λ λ¨μ μ°Έμ‘°κ°μΌλ‘, μ€μΌμΌμ μ μμμ κ·Όκ±°λ‘ count λ³΄λ€ μ’λ λ§κ±°λ μ μ κ°μ λ°ννλ€.
# pow.tickFormat([count])
μΆλ ₯μ© κ΅¬λΆμ(tick) κ°μΌλ‘ μ¬μ©ν μ μ ν number format ν¨μλ₯Ό λ°ννλ€. μ λ¬μΈμ count λ ꡬλΆκ°μ μμ±νκΈ° μν΄μ μ¬μ©λλ count μ κ°μ κ°μ μ¬μ©ν΄μΌ νλ€. ꡬλΆμ μΆλ ₯μ μν΄μ κΌ μ€μΌμΌ λ΄μ₯ ꡬλΆμ ν¬λ§·ν°μΈ μ΄ λ©μλλ₯Ό μ¬μ©ν νμλ μμ§λ§, μ΄ λ©μλλ μ΄λ―Έ μ§μ λ ꡬλΆμ κ°κ²©μ κΈ°λ°ν΄μ κ΄λ ¨ μ νλλ₯Ό μλμΌλ‘ κ³μ°νλ€.
# pow.copy()
ν΄λΉ μ κ³± μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.
λ‘κ·Έ μ€μΌμΌμ μ ν μ€μΌμΌκ³Ό λΉμ·νμ§λ§, μΉμμ κ³μ°νκΈ° μ μ μ μμμ λ‘κ·Έ μ νμ μ μ©νλ€λ μ¬μ€μ΄ λ€λ₯΄λ€. μΉμ κ° y λ‘ λ§€νμ μ μμ κ° x μ λ‘κ·Έ ν¨μλ‘ ννλ μ μλ€. y = m log(x) + b . λ‘κ·Έ μ€μΌμΌμ μ μμ κ°μ -1μ κ³±ν΄μ μμ κ°λ μ§μνλ€. κ·Έλ¬λ©΄ μΉμ κ°μλ -1μ κ³±νλ€. νμ§λ§ λ‘κ·Έ μ€μΌμΌμ μ μμμ 0(zero) κ° ν¬ν¨λλ©΄ μλλ€. log(0) λ μμ 무νλ(negative infinity)λ€.
μλ°μ€ν¬λ¦½νΈμμ Math.log(0)μ κ°μ -Infinityλ€.
# d3.scale.log()
μ μμμ΄ [1,10] μ΄κ³ μΉμμ΄ [0,1]μΈ μμ© λ‘κ·Έ(λ°μκ° 10μΈ) μ€μΌμΌμ μλ‘ μμ±νλ€.
# log(x)
μ μμμ κ°μ€μμ x λ₯Ό μ λ¬μΈμλ‘ λκΈ°λ©΄ μΉμμμ μ°κ΄λ κ°μ λ°ννλ€.
# log.invert(y)
μΉμμ κ° y μ μμνλ μ μμ κ° x λ₯Ό λ°ννλ€. μ΄ λ©μλλ μΉμμ μ μμμΌλ‘ μ 맀ννλ€. μΉμμ μ ν¨ν κ° y μ λν΄μ log(log.invert( y )) λ y μ κ°λ€. μ μμμ μ μν κ° x μ λν΄μ log.invert(log( x ))λ x μ κ°λ€. λμΌνκ² μ μμκ³Ό μΉμμ λ€λ°κΎΌ μλ‘μ΄ μ€μΌμΌμ λΉλν¨μΌλ‘ invert μ°μ°μλ₯Ό μμ±ν μ μλ€. invert μ°μ°μλ λ§μ°μ€ μμΉμ ν½μ κ°μΌλ‘ μ°κ΄λ μ μμ κ°μ μ°Ύλ μνΈμμ©μ ꡬννλλ° μ μ©νλ€.
μ£Όμ: invert μ°μ°μλ μΉμμ΄ μ«μμΈ κ²½μ°λ§ μ§μνλ€! μ§λ ¬ν μ κ³±λΌλ―Έν° t λ₯Ό μΉμμ κ°κ³Ό 맀ννλλ° μ¬μ©νλ d3.interpolate λ μ¬μ©μ μ§μ μΈν°ν΄λ μ΄ν°μ μ§μμΌλ‘ D3λ μΉμμ λͺ¨λ νμ μ λ μ μλ€. λ°λΌμ μΉμμ μμ, λ¬Έμμ΄ λΏ μλλΌ μμμ κ°μ²΄λ κ°λ₯νλ€. νμ§λ§ μμμ νμ μ "μ보κ°(uninterpolate)" ν μ¬μ£Όλ μμΌλ―λ‘ invert μ°μ°μλ νμ¬ μ«μν μΉμλ§ μ§μνλ€.
# log.domain([values])
μ λ¬μΈμ numbers λ₯Ό μ§μ νλ©΄ μ§μ ν μ«μ λ°°μ΄λ‘ μ€μΌμΌμ μ μμμ μ§μ νλ€. μΈμ λ°°μ΄μ λ κ° μ΄μμ μ«μκ° μμ΄μΌ νλ€. λ°°μ΄μ μμκ° μ«μκ° μλλ©΄ κ°μ λ‘ μ«μμ νλ€. μ΄ κ°μ λ³νμ μ΄ μ€μΌμΌμ νΈμΆν λλ λΉμ·νκ² λ°μνλ€. μ΄μ κ°μ΄ μ κ³± μ€μΌμΌμ μ«μλ‘ λ³νλ μ μλ λͺ¨λ νμ μ μΈμ½λ©νκΈ° μν΄μ μ¬μ©λ μ μλ€. numbers λ₯Ό μ§μ νμ§ μμΌλ©΄ μ€μΌμΌμ νμ¬ μ μμμ λ°ννλ€.
μ ν μ€μΌμΌμ²λΌ, ( linear.domain μ°Έμ‘° ) λ‘ μ€μΌμΌλ μ μμκ³Ό μΉμμ μ§μ ν λ λ κ° μ΄μμ κ°μ μ¬μ©ν μ μλ€. μ΄μ²λΌ κ²°κ³Όλ λ€μ€ λ‘κ·Έ μ€μΌμΌ(polypower scale)μ΄λ€.
# log.range([values])
values μΈμλ₯Ό μ§μ νλ©΄, κ·Έ λ°°μ΄ κ°μΌλ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. μ λ¬μΈμλ‘ λ°λ λ°°μ΄μ μ μμκ³Ό κ°μλ₯Ό λ§μΆμ΄μΌ νλ―λ‘, λ κ° μ΄μμ κ°μ΄ μμ΄μΌ νλ€. λ°°μ΄μ μμλ κΌ μ«μμ¬μΌ ν νμλ μλ€. κ·Όλ³Έμ μΌλ‘ interpolatorμ μ§μμ λ°λ λͺ¨λ κ°μ΄ λμνλ€. νμ§λ§ invert μ°μ°μλ₯Ό μν΄μλ λ°λμ μ«μν μΉμμ΄μ¬μΌ νλ€. values λ₯Ό μ§μ νμ§ μμΌλ©΄, μ€μΌμΌμ νμ¬ μΉμμ λ°ννλ€.
# log.rangeRound(values)
μ§μ ν μ λ¬μΈμ values λ°°μ΄λ‘ μ€μΌμΌμ μΉμμ μ§μ νλ€. λ¨, μ€μΌμΌμ μ¬μ©ν μΈν°ν΄λ μ΄ν°λ‘ d3.interpolateRoundλ₯Ό μ§μ νλ€.μ΄λ μν°μ리μμ±μ νμ μ μ§μ°λ κ²½μ°μ²λΌ μ€μΌμΌμ μΉμμ΄ μ νν μ μμ¬μΌ ν λ μ μ©νλ€. λν μ€μΌμΌ μ μ© νμ μλμΌλ‘ μΉμμ λ°μ¬λ¦Όν λλ μ¬μ©ν μ μλ€.
# log.interpolate([factory])
μ λ¬μΈμ factory λ₯Ό λκΈ°λ©΄ μ€μΌμΌμ μΉμμ μν μΈν°ν΄λ μ΄ν°λ‘ factory λ₯Ό μ§μ νλ€. κΈ°λ³Έ μΈν°ν΄λ μ΄ν°λ d3.interpolateμ΄λ©°, μ΄λ₯Ό [0,1] λ²μμ μ μμ νλΌλ―Έλ *t λ₯Ό μΉμμ κ΄λ ¨ κ°μΌλ‘ 맀ννλλ° μ¬μ©νλ€. μ¦ μΈν°ν΄λ μ΄ν° ν©ν 리 ν¨μλ μΉμμ κ° μΈμ κ°λ€μ μν΄ κ°μ 보μ νλ μΈν°ν΄λ μ΄ν° μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄μ μ¬μ©λλ€.factory μΈμλ₯Ό μ§μ νμ§ μμΌλ©΄, ν΄λΉ μ€μΌμΌμ μΈν°ν΄λ μ΄ν° ν©ν 리λ₯Ό λ°ννλ€.
# log.clamp([boolean])
μ§μ ν boolean μ λ°λΌμ μΉμ λ²μλ₯Ό νμ νκ±°λ νμ§μλλ€. κΈ°λ³Έκ°μ μΉμ λ²μ νμ μ νμ§ μλλ€. (boolean = false) μΌλ°μ μΌλ‘ μ μμ λ²μ λ°μ κ°μ΄ μ€μΌμΌλ‘ μ λ¬λλ©΄, κ·Έ μ€μΌμΌμ μ ν μΈμ½λ²(linear extrapolation)μ ν΅ν΄μ μΉμ λ°κΉ₯μͺ½μ κ°μ λ°ννλ€. μλ₯Ό λ€μ΄, μ μμκ³Ό μΉμμ΄ λͺ¨λ [0,1]μΈ κΈ°λ³Έ μ€μΌμΌμ 2λ₯Ό μ λ ₯κ°μΌλ‘ λ£μΌλ©΄ μΆλ ₯κ°λ 2κ° λλ€. λ²μλ₯Ό νμ νλ©΄(booleanμ΄ trueμ΄λ©΄) μ κ·νλ μ μμ νλΌλ―Έν° t μ΄ μΉμ [0,1]λ‘ κ³ μ λλ€. μ¦, μ€μΌμΌμ λ°ν κ°μ μΈμ λ κ·Έ μΉμ μμ μλ€. boolean μ μ§μ νμ§ μμΌλ©΄, μΉμμ λ²μλ₯Ό νμ νκ³ μλμ§ μλμ§λ₯Ό λ°ννλ€.
# log.nice()
μ μμμ κΉλν λ°μ¬λ¦Ό κ°μΌλ‘ μμνκ³ λλλλ‘ νμ₯νλ€. μ΄ λ©μλλ μ€μΌμΌμ μ μμμ μμ ν΄μ κ°μ₯ κ·Όμ ν λ°μ¬λ¦Ό κ°μΌλ‘ μ μμμ κ²½κ³λ₯Ό νμ₯νλ€. μ¬κΈ°μ κ°μ₯ κ·Όμ ν λ°μ¬λ¦Ό κ°μ κ°μ₯ κ°κΉμ΄ 10μ μ κ³±μ κΈ°μ΄νλ€. μ΄ λ©μλλ μ μμμ λ°μ΄ν°μμ κ°μ Έμ€λλ° κ·Έ λ°μ΄ν°κ° μ μ μ λ κ°μ΄ μλ λ μ μ©νλ€. μλ₯Ό λ€μ΄. μ μμμ΄ [0.20147987687960267, 0.996679553296417]λΌλ©΄ nice λ©μλλ₯Ό ν΅ν κΉλν μ μμμ [0.1, 1]μ΄λ€. μ μμμ κ°μ΄ λ κ° μ΄μμ΄λ©΄, niceλ 첫 κ°κ³Ό λ§μ§λ§ κ°λ§ μν₯μ μ€λ€.
κ°μ μλ₯Ό λλλ°, liner.nice()μ pow.nice()λ κ²°κ³Όκ° [0.2, 1]μ΄κ³ log.nice()λ [0.1, 1]μ΄λ€. liner.nice()μ pow.nice()κ° exp(round(log( dx )) - 1) λΌλ 곡μμ μμ‘΄νλλ° λ°ν΄μ log.nice()λ 10μ μ κ³±μ μμ‘΄νλ―λ‘ κ°μ μμ λΌλ κ²°κ³Όκ° λ€λ₯΄λ€.
# log.ticks()
ν΄λΉ μ€μΌμΌμ λμμΈμμ λνκ°λ€μ λ°ννλ€. λ°νλλ κ΅¬λΆ κ°λ€μ κ° 10μ μ κ³±μΌλ‘ κ³ λ₯΄κ² λ±κ°κ²©μΌλ‘ λΆν¬ν΄μκ³ , μ μμ νμ₯μλ μμ νλ€. μ μμμ ꡬλΆνλ λν ꡬλΆκ°μ μκ°νλ λ°μ΄ν°μμ μ°Έμ‘°μ© λΌμΈμ΄λ κ΅¬λΆ λ§μ»€λ₯Ό 보μ¬μ£Όλλ° μ¬μ©λλ€. μμ© λ‘κ·Έ μ€μΌμΌμ΄λ―λ‘ κ΅¬λΆ κ°μ μ μ΄ν μλ μμ§λ§ ꡬλΆκ°μ κ° μλ₯Ό μ€μ΄κ³ μΆλ€λ©΄ λ°ν λ°°μ΄μ νν°λ§ νλ©΄ λλ€.
# log.tickFormat([count, [format]])
μΆλ ₯μ© κ΅¬λΆμ(tick) κ°μΌλ‘ μ¬μ©ν μ μ ν number format ν¨μλ₯Ό λ°ννλ€. λ°νλ ꡬλΆμ ν¬λ©§μ d.toPrecision(1)
κ°μ΄ ꡬνλλ€. μ λ¬μΈμ count λ₯Ό μ§μ νλ©΄, count κ°μ λ°λΌμ μΆλ ₯μ© κ΅¬λΆμ λΌλ²¨ μ€μ λͺ κ°κ° μΆλ ₯κ°μ΄ μμ μ μλ€. μ΄λ λΌλ²¨μ λͺ¨λ 보μ¬μ€ 곡κ°μ΄ μΆ©λΆνμ§ μλ€λ©΄ μ μ©νλ€. νμ§λ§ λ‘κ·Έ μ€μΌμΌμ΄ μ곑λμλ€λ μ¬μ€μ λμΌλ‘ λ³Ό μ μλλ‘, λΌλ²¨κ³Ό λ¬λ¦¬ ꡬλΆμ λ§μ»€λ μ¬μ ν μΆλ ₯λλ€. (μ리λ₯Ό λ§μ΄ μ°¨μ§νλ λΌλ²¨μ μλ΅νκ³ λ§μ»€λ§ λ¨μμλ€.) countλ₯Ό μ§μ νλ©΄μ format ν¨μλ₯Ό μ€λ²λΌμ΄λ ν μλ μλ€. μλ₯Ό λ€μ΄ 20κ°μ λ¬λ¬ ꡬλΆμλ λ€μκ³Ό κ°λ€.
var formatNumber = d3.format(",.0f"), // for formatting integers
formatCurrency = function(d) { return "$" + formatNumber(d); };
scale.ticks(20, formatCurrency);
# log.copy()
ν΄λΉ μ κ³± μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.
μμ μ€μΌμΌμ μ°μμ λ²μλ₯Ό λΆμ ν μ ν μ€μΌμΌμ λ³μ’ μ΄λ€. μ μμμ μ¬μ ν μ°μμ λ²μλ₯Ό κ°μ§λ κ°λ€μ΄μ§λ§ μΉμμ μμμ μλ₯Ό κΈ°λ°μΌλ‘ λμΌ κ°κ²©μΌλ‘ λλλ€. μΉμ κ° y μ μν 맀νμ μ μμ κ° x μ μ ν ν¨μ y = mx + b κΈ°λ°μΌλ‘ μ€λͺ λ μ μλ€. μ μμμ μΌλ°μ μΌλ‘ νλ³Έ μ§λ¨μ€ νμλ€μ ν€(μΈ‘μ λ¨μ λ―Έν°) κ°μ μκ°νλ₯Ό μν λ°μ΄ν°μ΄λ€. μΉμμ μΌλ°μ μΌλ‘ νμ€ν κ·Έλ¨μ λ§λ λμ΄(μΈ‘μ λ¨μ ν½μ ) μ²λΌ μΆλ ₯ μκ°νλ‘ κ²°μ λ κ°μ΄λ€.
# d3.scale.quantize()
μ μμ [0, 1]κ³Ό μΉμ [0, 1]λ₯Ό κΈ°λ³Έκ°μΌλ‘ νλ μμ μ€μΌμΌμ μ κ·λ‘ μμ±νλ€. κΈ°λ³Έ μμ μ€μΌμΌμ μ«μλ€μ μν΄μ round ν¨μλ₯Ό μ¬μ©ν κ²κ³Ό λμΌνλ€. μλ₯Ό λ€μ΄ quantize(0.49)λ 0μ λ°ννκ³ , quantize(0.51)μ 1μ λ°ννλ€.
# quantize(x)
μ μμμ xλ₯Ό μ λ ₯νλ€. κ·Έλ¬λ©΄ κ·Έμ ν΄λΉνλ μΉμ κ°μ λ°ννλ€.
# quantize.domain([numbers])
μ λ¬μΈμ numbersλ₯Ό μ§μ νλ©΄ λκ°μ κ°μ κ°μ§ μ«μ λ°°μ΄λ‘ μ μμμ μ§μ νλ€. numbers λ°°μ΄μ΄ μμλ₯Ό λκ° μ΄μ κ°μ§κ³ μμΌλ©΄ 첫 λ²μ§Έ μμ λ§μ§λ§ μλ§ μ¬μ©νλ€. μ£Όμ΄μ§ λ°°μ΄μ μμκ° μ«μκ° μλλ©΄ μ«μλ‘ κ°μ νλ€. μ΄ μ€μΌμΌμ νΈμΆν λ λΉμ·ν λμμ΄ λ°μνλ€. μ΄μ²λΌ μ«μλ‘ λ³ν κ°λ₯ν νμ μ μΈμ½λ©νλλ° μμ μ€μΌμΌμ μ¬μ©ν μ μλ€. μ λ¬μΈμ numbersλ₯Ό μ§μ νμ§ μμΌλ©΄ μ€μΌμΌμ νμ¬ μ μμμ λ°ννλ€.
# quantize.range([values])
μ λ¬μΈμ values λ₯Ό μ§μ νλ©΄ μ§μ ν λ°°μ΄μ κ°μΌλ‘ μΉμμ μ§μ νλ€. μ΄ λ°°μ΄μ κ°μ μ ν μκ³ λͺ¨λ μ΄μ° κ°μ΄ κ°λ₯νλ€. μ£Όμ΄μ§ κ°λ³μ μμλ μ«μμΌ νμλ μλ€. λͺ¨λ κ°, μ΄λ€ νμ λ κ°λ₯νλ€. μ λ¬μΈμ values λ₯Ό μ§μ νμ§ μμΌλ©΄ νμ¬ μΉμμ λ°ννλ€.
# quantize.copy()
ν΄λΉ μ ν μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.
μ¬λΆμ(quantile) μ€μΌμΌμ μ μμμ μ΄μ° λ²μλ‘ λ§€ννλ€. μ λ ₯ν μ μμ κ°μ΄ μ°μμ μ΄λ©° ν΄λΉ μ€μΌμΌμ΄ μ μ ν μ λ ₯κ°μ λ°μ μ§λΌλ, μ μμμ μ΄μ°(discrete)λ κ°μ μ§ν©μΌλ‘ μ§μ λλ€. μΆλ ₯λλ μΉμμ ν¬κΈ°(cardinality)μμ μμμ μλ μ λ ₯λλ μ μμ κΈ°λ°μΌλ‘ κ³μ°λ μ¬λΆμ μλ₯Ό λνλΈλ€. μ¬λΆμλ₯Ό κ³μ°νκΈ° μν΄μ μ λ ₯λλ μ μμμ μ μ₯λκ³ μ΄μ° κ°μ μ§ν©μΌλ‘ λ€λ€μ§λ€. μΌλ°μ μΌλ‘ μ λ ₯λλ μ μμμ μκ°ν νκΈ°λ₯Ό μνλ μ£Όμμμ₯μ μΌμΌ λ³λκ°μ λ°μ΄ν°μ λμ΄κ³ , μΆλ ₯λλ μΉμμ ꡬλΆλ μμ μ€μΌμΌ κ°μ μΆλ ₯ μκ°νλ‘ κ²°μ λ κ°μ΄λ€.
# d3.scale.quantile()
λΉμ΄μλ μ μμκ³Ό μΉμμΌλ‘ μ¬λΆμ μ€μΌμΌμ μ κ·λ‘ μμ±νλ€. μ¬λΆμ μ€μΌμΌμ μ μμκ³Ό μΉμμ μ§μ νκΈ° μ κΉμ§λ μ ν¨νμ§ μλ€.
# quantile(x)
μ μμμ xλ₯Ό μ λ ₯νλ€. κ·Έλ¬λ©΄ κ·Έμ ν΄λΉνλ μΉμ κ°μ λ°ννλ€.
# quantile.domain([numbers])
μ λ¬μΈμ numbers λ₯Ό μ§μ νλ©΄ μ΄μ° κ°(μ«μ)μ μ§ν©μΌλ‘ μ¬λΆμ μ€μΌμΌμ μ μμμ μ§μ νλ€. μ΄ λ°°μ΄μ μμκ° λ°λμ μμ΄μΌ νλ©°, νλμ΄μμ΄ μ«μμ¬μΌ νλ€. κ°μ΄ NaN, null, undefined μ΄λ©΄ 무μνκ³ μν μ§λ¨μΌλ‘ κ³ λ €νμ§ μλλ€. μ£Όμ΄μ§ λ°°μ΄μ μμκ° μ«μκ° μλλ©΄ κ°μ λ‘ κ°μ νλ€. μ΄ μ€μΌμΌμ νΈμΆν λ λΉμ·ν λμμ΄ λ°μνλ€. μ λ ₯ λ°°μ΄μ μ¬λ³Έμ μ λ ¬ν΄μ λ΄λΆμ μΌλ‘ μ μ₯νλ€. μ΄μ²λΌ μ«μλ‘ λ³ν κ°λ₯ν νμ μ μΈμ½λ©νλλ° μ¬λΆμ μ€μΌμΌμ μ¬μ©ν μ μλ€. μ λ¬μΈμ numbers λ₯Ό μ§μ νμ§ μμΌλ©΄, μ€μΌμΌμ νμ¬ μ μμμ λ°ννλ€.
# quantile.range([values])
μ λ¬μΈμ values λ₯Ό μ§μ νλ©΄ μ§μ ν λ°°μ΄μ κ°μΌλ‘ μΉμμ μ§μ νλ€. μ΄ λ°°μ΄μ μμκ° λ°λμ μμ΄μΌ νλ©°, λͺ¨λ νμ μ΄ κ°λ₯νλ€. values λ°°μ΄μ μμμ μλ κ³μ°λ μ¬λΆμ μμ¬μΌ νλ€. μλ₯Ό λ€μ΄, μ¬λΆμλ₯Ό κ³μ°νκΈ° μν΄μ value λ [0, 1, 2, 3] κ°μ΄ μμκ° λ€ κ°μΈ λ°°μ΄μ΄μ¬μΌ νλ€. values μ λ¬μΈμκ° μμΌλ©΄, νμ¬ μΉμ λ²μλ₯Ό λ°ννλ€.
# quantile.quantiles()
μ¬λΆμ μκ³κ°λ€μ λ°ννλ€. μΉμμ n κ°μ μ΄μ° κ°μ΄ μλ€λ©΄, λ°ν μΈκ³κ° λ°°μ΄μ n - 1κ°μ κ°μ κ°μ§κ³ μλ€. μκ³κ° λ°°μ΄μ μ²«λ² μ§Έ μμ(quantiles()[0])λ³΄λ€ μ μ κ°λ€μ, κ·Έ 첫 μ¬λΆμ μλ‘ κ²°μ λλ€. μ΄λ³΄λ€ ν¬κ³ λ λ²μ§Έ μκ³κ° λ³΄λ€ μμ κ°λ€μ λ λ²μ§Έ μ¬λΆμ μ, κ·Έλ°μμ΄λ€. λ΄λΆμ μΌλ‘ μκ³κ° λ°°μ΄μ μ£Όμ΄μ§ μ λ ₯κ°μΌλ‘ κ΄λ ¨λ μ¬λΆμ κ°μ μ°ΎκΈ°μν΄μ d3.bisectμ μ¬μ©λλ€.
# quantile.copy()
ν΄λΉ μ ν μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.
μκ³κ° μ€μΌμΌμ μμ μ€μΌμΌ(quantize scales)κ³Ό λΉμ·νλ€. λ¨ μ μμμ μμμ νμμ§ν©μ μΉμμ μ΄μ° κ°λ€λ‘ 맀νν μ μλ€. μ μμμ κ°μ μ¬μ ν μ°μμ μ΄κ³ μκ³κ° μ§ν©μ κΈ°μ΄ν΄ μ‘°κ°λ€λ‘ λΆν λλ€. μ μμμ μΌλ°μ μΌλ‘ νλ³Έ μ§λ¨μ€ νμλ€μ ν€(μΈ‘μ λ¨μ λ―Έν°) κ°μ μκ°νλ₯Ό μν λ°μ΄ν°μ΄λ€. μΉμμ μΌλ°μ μΌλ‘ νμ€ν κ·Έλ¨μ λ§λ λμ΄(μΈ‘μ λ¨μ ν½μ ) μ²λΌ μΆλ ₯ μκ°νλ‘ κ²°μ λ κ°μ΄λ€.
# d3.scale.threshold()
μ μμμ΄ [.5]μ΄κ³ μΉμμ΄ [0,1]μΈ μκ³κ° μ€μΌμΌμ μλ‘ μμ±νλ€. μ΄μ²λΌ κΈ°λ³Έ μμ μ€μΌμΌμ μ«μλ₯Ό μν μλ°μ€ν¬λ¦½νΈμ round ν¨μμ λμΌνλ€. μλ₯Ό λ€λ©΄ threshold(0.49) λ 0μ λ°ννκ³ threshold(0.51)μ 1μ λ°ννλ€.
# threshold(x)
μ μμμ xλ₯Ό μ λ ₯νλ€. κ·Έλ¬λ©΄ κ·Έμ ν΄λΉνλ μΉμ κ°μ λ°ννλ€.
# threshold.domain([domain])
μ λ¬μΈμ domain λ₯Ό μ§μ νλ©΄, μ§μ ν λ°°μ΄λ‘ μ μμμ μ§μ νλ€. λ°°μ΄μ κ°μ μμ°¨μ λ ¬λμ΄ μμ΄μΌ νλ€. κ·Έλ μ§ μμΌλ©΄ κ·Έ μ€μΌμΌμ λμμ undefinedλλ€. κ°λ€μ μΌλ°μ μΌλ‘λ μ«μμ§λ§, λͺ¨λ μμ°μ μΈ μμμ κ°λ€(λ¬Έμμ΄ κ°μ)μ λμν κ²μ΄λ€. μ΄μ²λΌ μκ³κ° μ€μΌμΌμ μ λ ¬λ μ΄λ€ νμ μ μΈμ½λ©νκΈ° μν΄μ μ¬μ©λ μ μλ€. μ€μΌμΌ μΉμμ κ°λ€μ κ°μκ° N + 1μ΄λ©΄, μ€μΌμΌμ μ μμ κ°λ€μ κ°μλ Nμ΄μ¬μΌλ§ νλ€. μ μμμ μμμκ° Nλ³΄λ€ μ μΌλ©΄, μΉμμ λ¨λ κ°μ 무μλλ€. μ μμμ μμμκ° Nλ³΄λ€ λ§μΌλ©΄, κ·Έ μ€μΌμΌμ λͺκ°μ μ λ ₯κ°μ λν΄μ undefinedλ₯Ό λ°ννλ€. domain λ₯Ό μ§μ νμ§ μμΌλ©΄, νμ¬ μ μμμ λ°ννλ€.
# threshold.range([values])
μ λ¬μΈμ values λ₯Ό μ§μ νλ©΄ μ§μ ν λ°°μ΄λ‘ μΉμμ μ§μ νλ€. μ΄ μ€μΌμΌμ μ μμ κ°μ κ°μκ° Nκ°λ©΄, κ·Έ μ€μΌμΌμ μΉμ κ°μ κ°μλ N + 1μ¬μΌ νλ€. μΉμμ μμ κ°μκ° N+1λ³΄λ€ μ μΌλ©΄, κ·Έ μ€μΌμΌμ λͺκ°μ μ λ ₯κ°μ λν΄μ undefinedλ₯Ό λ°ννλ€. μΉμμ μμ κ°μκ° N + 1λ³΄λ€ λ§μΌλ©΄, λ¨μ κ°λ€μ 무μλλ€. μ£Όμ΄μ§ λ°°μ΄μμ μμλ€μ μ«μμΌ νμλ μλ€. λͺ¨λ κ°κ³Ό νμ μ΄ λμνλ€. values λ₯Ό μ§μ νμ§ μμΌλ©΄, μ€μΌμΌμ νμ¬ μΉμ λ²μλ₯Ό λ°ννλ€.
# threshold.copy()
ν΄λΉ μ ν μ€μΌμΌμ μ λ° λ³΅μ λ₯Ό λ°ννλ€. ν΄λΉ μ€μΌμΌμ λ³νλ λ°ν μ€μΌμΌμ μν₯μ μ£Όμ§ μλλ€. λ°λλ λ§μ°¬κ°μ§λ€.