Scale.NiceRange¶
Computes a "nice" axis range with rounded min, max, and tick interval Returns values suitable for human-friendly axis labelling
| Parameter | Type | Required | Description |
|---|---|---|---|
| dataMin | NUMERIC VAL | Minimum value from source data | |
| dataMax | NUMERIC VAL | Maximum value from source data | |
| maxTicks | INT64 | Optional: Desired maximum number of ticks. Defaults to 5 | |
| includeZero | BOOLEAN | Optional: Whether to include zero in the range when data is fully positive. Defaults to FALSE. |
TABLE Single-row table with @NiceMin, @NiceMax, @NiceInterval, @NiceTickCount
function 'DaxLib.SVG.Scale.NiceRange' =
(
dataMin: NUMERIC VAL,
dataMax: NUMERIC VAL,
maxTicks: INT64,
includeZero: BOOLEAN
) =>
VAR _MaxTicks = IF( ISBLANK( maxTicks ) || maxTicks < 2, 5, maxTicks )
VAR _IncludeZero = IF( ISBLANK( includeZero ), FALSE(), includeZero )
VAR _DataMin = IF( _IncludeZero && dataMin > 0, 0, dataMin )
VAR _DataMax = dataMax
VAR _Range = _DataMax - _DataMin
VAR _NiceInterval =
IF(
_Range = 0,
IF( _DataMax = 0, 1, DaxLib.SVG.Scale.NiceNum( ABS( _DataMax ) * 0.2, TRUE() ) ),
DaxLib.SVG.Scale.NiceNum( _Range / ( _MaxTicks - 1 ), TRUE() )
)
VAR _NiceMin = INT( _DataMin / _NiceInterval ) * _NiceInterval
VAR _NiceMax = -INT( -_DataMax / _NiceInterval ) * _NiceInterval
VAR _NiceTickCount = INT( ( _NiceMax - _NiceMin ) / _NiceInterval ) + 1
RETURN
ROW(
"@NiceMin", _NiceMin,
"@NiceMax", _NiceMax,
"@NiceInterval", _NiceInterval,
"@NiceTickCount", _NiceTickCount
)