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?
Returns
[number, number]
Implementation of
getDomain()
getDomain(): [
number,number]
Defined in: packages/core/src/scale/log-scale.ts:55
데이터 도메인 [min, max]
Returns
[number, number]
Implementation of
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
invert()
invert(
screenValue):number
Defined in: packages/core/src/scale/log-scale.ts:100
화면 좌표 → 데이터 값
Parameters
screenValue
number
Returns
number
Implementation of
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
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
setRange()
setRange(
start,end):void
Defined in: packages/core/src/scale/log-scale.ts:51
Parameters
start
number
end
number
Returns
void