in plot-api/src/commonMain/kotlin/org/jetbrains/letsPlot/ggmarginal.kt [37:69]
fun ggmarginal(
sides: String,
size: Any? = null,
layer: Feature
): Feature {
require(sides.isNotBlank()) { SIDES_ARG_ERROR }
require(sides.length <= 4) { SIDES_ARG_ERROR }
val sizeList = when (size) {
null -> emptyList()
is Number -> List(4) { (size.toDouble()) }
is Pair<*, *> -> size.toList()
is Iterable<*> -> size.toList()
else -> throw IllegalArgumentException("Invalid 'size' type: ${size::class.simpleName}. Expected: number, list or pair.")
} + List<Any?>(4) { null }
if (layer is FeatureList) {
return FeatureList(
layer.elements.map { sublayer -> ggmarginal(sides, size = size, layer = sublayer) }
)
}
require(layer is Layer) { "Invalid 'layer' type: ${layer::class.simpleName}" }
var result: Feature = DummyFeature
for ((i, side) in sides.withIndex()) {
val marginSize = toMarginSize(sizeList[i])
result += toMarginal(side.lowercaseChar(), marginSize, layer)
}
return result
}