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 μžμ‹ μ„ λ°˜ν™˜ν•œλ‹€. 이λ₯Ό ν†΅ν•΄μ„œ 호좜 ꡬ문이 간결해지도둝 μ—¬λŸ¬κ°œμ˜ μ„Έν„° μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

Linear Scales

μ„ ν˜• μŠ€μΌ€μΌμ€ κ°€μž₯ 일반적인 척도이닀. 연속적인 μ •μ˜μ—­μ„ 연속적인 μΉ˜μ—­μœΌλ‘œ λ§€ν•‘ν•˜κΈ°μ— 쒋은 선택이닀. 이 맀핑은 μ„ ν˜• 맀핑이닀. 좜λ ₯ λ²”μœ„κ°’ 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()

ν•΄λ‹Ή μ„ ν˜• μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

Identity Scales

ν•­λ“± μŠ€μΌ€μΌμ€ μ •μ˜μ—­κ³Ό μΉ˜μ—­μ΄ λ™μΌν•œ μ„ ν˜• μŠ€μΌ€μΌμ˜ νŠΉλ³„ν•œ μΌ€μ΄μŠ€λ‹€. 이 μŠ€μΌ€μΌμ™€ 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()

ν•΄λ‹Ή μ„ ν˜• μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€

Power Scales

제곱 μŠ€μΌ€μΌμ€ μ„ ν˜• μŠ€μΌ€μΌκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, μΉ˜μ—­μ„ κ³„μ‚°ν•˜κΈ° 전에 μ •μ˜μ—­μ— μ§€μˆ˜ μ „ν™˜μ„ μ μš©ν•œλ‹€λŠ” 사싀이 λ‹€λ₯΄λ‹€. μΉ˜μ—­ κ°’ 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()

ν•΄λ‹Ή 제곱 μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

Log Scales

둜그 μŠ€μΌ€μΌμ€ μ„ ν˜• μŠ€μΌ€μΌκ³Ό λΉ„μŠ·ν•˜μ§€λ§Œ, μΉ˜μ—­μ„ κ³„μ‚°ν•˜κΈ° 전에 μ •μ˜μ—­μ— 둜그 μ „ν™˜μ„ μ μš©ν•œλ‹€λŠ” 사싀이 λ‹€λ₯΄λ‹€. μΉ˜μ—­ κ°’ 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()

ν•΄λ‹Ή 제곱 μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

Quantize Scales

μ–‘μž μŠ€μΌ€μΌμ€ 연속적 λ²”μœ„λ₯Ό λΆ„μ ˆν•œ μ„ ν˜• μŠ€μΌ€μΌμ˜ 변쒅이닀. μ •μ˜μ—­μ€ μ—¬μ „νžˆ 연속적 λ²”μœ„λ₯Ό κ°€μ§€λŠ” κ°’λ“€μ΄μ§€λ§Œ μΉ˜μ—­μ˜ μ›μ†Œμ˜ 수λ₯Ό 기반으둜 동일 κ°„κ²©μœΌλ‘œ λ‚˜λ‰œλ‹€. μΉ˜μ—­ κ°’ 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 Scales

μ‚¬λΆ„μœ„(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()

ν•΄λ‹Ή μ„ ν˜• μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

Threshold Scales

μž„κ³„κ°’ μŠ€μΌ€μΌμ€ μ–‘μž μŠ€μΌ€μΌ(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()

ν•΄λ‹Ή μ„ ν˜• μŠ€μΌ€μΌμ˜ μ •λ°€ 볡제λ₯Ό λ°˜ν™˜ν•œλ‹€. ν•΄λ‹Ή μŠ€μΌ€μΌμ˜ λ³€ν™”λŠ” λ°˜ν™˜ μŠ€μΌ€μΌμ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ°˜λŒ€λ„ λ§ˆμ°¬κ°€μ§€λ‹€.

⚠️ **GitHub.com Fallback** ⚠️