Skip to content

Documentation / @finchart/core / LogScale

Class: LogScale

Defined in: packages/core/src/scale/log-scale.ts:20

데이터 도메인 ↔ 화면 좌표의 단방향 매핑. pan/zoom에서 도메인이 계속 바뀌므로 가변(mutable)이다. 잘못된 입력은 Result가 아니라 throw로 알린다.

Implements

Constructors

Constructor

new LogScale(domainMin?, domainMax?, rangeMin?, rangeMax?): LogScale

Defined in: packages/core/src/scale/log-scale.ts:24

Parameters

domainMin?

number

domainMax?

number

rangeMin?

number

rangeMax?

number

Returns

LogScale

Methods

expand()

expand(range, ratio, hints?): [number, number]

Defined in: packages/core/src/scale/log-scale.ts:130

로그 공간에서 선형으로 여유를 준다.

화면에서 보면 선형 축과 똑같이 "위아래로 ratio만큼"인데, 값으로는 곱셈이 된다: [min / f, max × f], f = (max/min)^ratio.

결과가 0을 넘어갈 수 없다 — 입력이 이미 양수라면. 하지만 expand는 데이터를 그대로 받으므로 close: 0처럼 비양수가 섞이면 Math.pow(max/0, ratio) = Infinity가 되고, 음수가 섞이면 NaN이 된다. 그 값이 그대로 setDomain에 닿으면 메시지가 유한성 문제처럼 보여 진짜 원인(비양수 섞임)을 가린다.

그래서 양수 구간만 남긴다 — 0 이하가 섞였다고 던지지 않는다. 그 값들은 로그 축에 자리가 없으니 축 아래로 벗어날 뿐이다(선형 축에서 화면 밖 값과 같다). 양수가 하나도 없으면 그때는 진짜로 그릴 수 없고, 아래 setDomain이 "LogScale domain must be positive"로 자기 이름을 말한다.

미체결·휴장 봉의 close: 0과 음수 정산가가 그 값의 출처다.

Parameters

range

readonly [number, number]

ratio

number

hints?

ExpandHints

Returns

[number, number]

Implementation of

Scale.expand


getDomain()

getDomain(): [number, number]

Defined in: packages/core/src/scale/log-scale.ts:55

데이터 도메인 [min, max]

Returns

[number, number]

Implementation of

Scale.getDomain


getRange()

getRange(): [number, number]

Defined in: packages/core/src/scale/log-scale.ts:59

화면 범위 [start, end] (px).

start > end인 역방향도 허용한다. 화면 y는 아래로 증가하므로 y축은 [bottom, top]으로 설정해 큰 값이 위에 오게 만든다 — 이 반전을 스케일이 들고 있어야 차트와 축이 같은 좌표를 본다.

Returns

[number, number]

Implementation of

Scale.getRange


invert()

invert(screenValue): number

Defined in: packages/core/src/scale/log-scale.ts:100

화면 좌표 → 데이터 값

Parameters

screenValue

number

Returns

number

Implementation of

Scale.invert


scale()

scale(value): number

Defined in: packages/core/src/scale/log-scale.ts:77

값 → 픽셀.

0 이하는 던지지 않고 축 아래로 내보낸다. 이 함수는 그리기 경로다 — 시리즈가 점마다 부르고, close: 0 봉 하나가 섞이면 프레임이 통째로 죽는다. 로그 축에서 0은 무한히 아래에 있는 값이지 계약 위반이 아니다.

선형 축에서 화면 밖 값이 받는 대접을 똑같이 준다 — 픽셀이 나오되 영역 밖이라 안 그려진다. 계약 위반(양수가 하나도 없는 도메인)은 setDomain이 여전히 자기 이름으로 거절한다.

-Infinity가 아니라 유한한 값을 돌려주는 것이 중요하다 — 비유한 좌표는 fillRect를 무동작으로 만들어 몸통 전멸을 부른다.

Parameters

value

number

Returns

number

Implementation of

Scale.scale


setDomain()

setDomain(min, max): void

Defined in: packages/core/src/scale/log-scale.ts:42

유한성을 먼저 본다 — min <= 0 || max <= 0만 보면 Infinity > 0이라 max = Infinity가 통과해 무한 눈금 루프에 도달할 수 있다.

Parameters

min

number

max

number

Returns

void

Implementation of

Scale.setDomain


setRange()

setRange(start, end): void

Defined in: packages/core/src/scale/log-scale.ts:51

Parameters

start

number

end

number

Returns

void

Implementation of

Scale.setRange