in plot-builder/src/commonMain/kotlin/org/jetbrains/letsPlot/core/plot/builder/assemble/GeomLayerBuilder.kt [177:256]
fun build(
data: DataFrame,
scaleMap: Map<Aes<*>, Scale>,
scaleMapppersNP: Map<Aes<*>, ScaleMapper<*>>,
): GeomLayer {
val transformByAes: Map<Aes<*>, Transform> = scaleMap.keys.associateWith {
scaleMap.getValue(it).transform
}
@Suppress("NAME_SHADOWING")
var data = data
if (myDataPreprocessor != null) {
// Test and Demo
data = myDataPreprocessor!!(data, transformByAes)
}
// make sure 'original' series are transformed
data = DataProcessing.transformOriginals(data, myBindings, transformByAes)
val replacementBindings = HashMap(
// No 'origin' variables beyond this point.
// Replace all 'origin' variables in bindings with 'transform' variables
myBindings.associate {
it.aes to if (it.variable.isOrigin) {
val transformVar = DataFrameUtil.transformVarFor(it.aes)
VarBinding(transformVar, it.aes)
} else {
it
}
}
)
// add 'transform' variable for each 'stat' variable
val bindingsToPut = ArrayList<VarBinding>()
for (binding in replacementBindings.values) {
val variable = binding.variable
if (variable.isStat) {
val aes = binding.aes
val transform = transformByAes.getValue(aes)
val transformVar = TransformVar.forAes(aes)
data = DataFrameUtil.applyTransform(data, variable, transformVar, transform)
bindingsToPut.add(VarBinding(transformVar, aes))
}
}
// replace 'stat' vars with 'transform' vars in bindings
for (binding in bindingsToPut) {
replacementBindings[binding.aes] = binding
}
val groupingContext = if (handlesGroups()) {
GroupingContext.create(data, explicitGroupingVarNames, myBindings, myPathIdVarName)
} else {
GroupingContext.singleGroup()
}
return MyGeomLayer(
data,
geomProvider,
myGeomTheme,
posProvider,
groupingContext.groupMapper,
replacementBindings,
myConstantByAes,
scaleMap,
scaleMapppersNP,
myLocatorLookupSpec,
myContextualMappingProvider,
myIsLegendDisabled,
myCustomLegendOptions,
isYOrientation = isYOrientation,
isMarginal = isMarginal,
marginalSide = marginalSide,
marginalSize = marginalSize,
fontFamilyRegistry = fontFamilyRegistry,
colorByAes = colorByAes,
fillByAes = fillByAes,
annotationProvider = myAnnotationProvider,
defaultFormatters = myDefaultFormatters,
)
}