Skip to content

Quantitative Scales

zziuni edited this page Jul 10, 2013 · 46 revisions

WikiAPI ReferenceScalesQuantitative 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()

해당 선형 스케일의 정밀 복제를 반환한다. 해당 스케일의 변화는 반환 스케일에 영향을 주지 않는다. 반대도 마찬가지다.

Clone this wiki locally