in plot-stem/src/commonMain/kotlin/org/jetbrains/letsPlot/core/spec/config/ScaleConfig.kt [221:286]
fun createScaleProviderBuilder(): ScaleProviderBuilder<T> {
val discreteDomain = enforceDiscreteDomain()
val reverse = getBoolean(Option.Scale.DISCRETE_DOMAIN_REVERSE)
val b = ScaleProviderBuilder(aes)
b.discreteDomain(discreteDomain)
b.discreteDomainReverse(reverse)
if (getBoolean(Option.Scale.DATE_TIME)) {
val dateTimeFormatter = getString(FORMAT)?.let { pattern ->
val stringFormat = FormatterUtil.byPattern(pattern, tz = tz)
return@let { value: Any -> stringFormat.format(value) }
}
// Check if 'break_width' is specified
val breakWidthSpec = getString(BREAK_WIDTH)
if (breakWidthSpec != null) {
val breakWidth = TimeInterval.parse(breakWidthSpec)
b.breaksGenerator(
DateTimeFixedBreaksGen(
breakWidth = breakWidth,
providedFormatter = dateTimeFormatter,
tz = tz
)
)
} else {
configureDateTimeScaleBreaks(
b,
dateTimeFormatter,
dataType,
tz,
)
}
} else if (getBoolean(Option.Scale.TIME)) {
b.breaksGenerator(TimeBreaksGen())
} else if (!discreteDomain && has(Option.Scale.CONTINUOUS_TRANSFORM)) {
val transformName = getStringSafe(Option.Scale.CONTINUOUS_TRANSFORM)
val transform = when (transformName.lowercase()) {
TransformName.IDENTITY -> Transforms.IDENTITY
TransformName.LOG10 -> Transforms.LOG10
TransformName.LOG2 -> Transforms.LOG2
TransformName.SYMLOG -> Transforms.SYMLOG
TransformName.REVERSE -> Transforms.REVERSE
TransformName.SQRT -> Transforms.SQRT
else -> throw IllegalArgumentException(
"Unknown transform name: '$transformName'. Supported: ${
listOf(
TransformName.IDENTITY,
TransformName.LOG10,
TransformName.LOG2,
TransformName.SYMLOG,
TransformName.REVERSE,
TransformName.SQRT
).joinToString(transform = { "'$it'" })
}."
)
}
b.continuousTransform(transform)
}
if (aes in listOf<Aes<*>>(Aes.X, Aes.Y) && has(Option.Scale.POSITION)) {
b.axisPosition = axisPosition(aes)
}
return applyCommons(b)
}