fun ggmarginal()

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
}