Multi-series scatter plot

import io.data2viz.charting.* import io.data2viz.charting.dimension.* import io.data2viz.charting.chart.* import io.data2viz.charting.chart.mark.* import io.data2viz.charting.viz.* import io.data2viz.geom.* import io.data2viz.charting.layout.* import io.data2viz.math.* import io.data2viz.shape.* val width = 700.0 val height = 500.0 enum class Gender { M, F } data class Record(val gender: Gender, val weight: Double, val height: Double) fun main() { // Creating and sizing the VizContainer val vc = newVizContainer().apply { size = Size(width, height) } vc.chart(results) { // Use a "crosshair" cursor cursor { type = Cursor.Type.Crosshair } // Create 2 continuous numeric dimensions val weight = quantitative( { domain.weight } ) { name = "Weight in Kg." } val height = quantitative( { domain.height } ) { name = "Height in cm." } // Split our dataset in 2 series based on gender series = discrete( { domain.gender } ) // Plot values plot(weight, height) { strokeColor = discrete( { config.mark.discreteFills[indexOfSeries].withAlpha(50.pct) } ) symbol = discrete( { if (domain.gender == Gender.M) Symbols.Diamond else Symbols.Circle } ) } } } val results = listOf( Record(Gender.M,77.0,182.0), Record(Gender.F,58.0,161.0), Record(Gender.F,53.0,161.0), Record(Gender.M,68.0,177.0), Record(Gender.F,59.0,157.0), Record(Gender.M,76.0,170.0), Record(Gender.M,76.0,167.0), Record(Gender.M,69.0,186.0), Record(Gender.M,71.0,178.0), Record(Gender.M,65.0,171.0), Record(Gender.M,70.0,175.0), Record(Gender.F,51.0,161.0), Record(Gender.F,64.0,168.0), Record(Gender.F,52.0,163.0), Record(Gender.F,65.0,166.0), Record(Gender.M,92.0,187.0), Record(Gender.F,62.0,168.0), Record(Gender.M,76.0,197.0), Record(Gender.F,61.0,175.0), Record(Gender.M,119.0,180.0), Record(Gender.F,61.0,170.0), Record(Gender.M,65.0,175.0), Record(Gender.M,66.0,173.0), Record(Gender.F,54.0,171.0), Record(Gender.F,50.0,166.0), Record(Gender.F,63.0,169.0), Record(Gender.F,58.0,166.0), Record(Gender.F,39.0,157.0), Record(Gender.M,101.0,183.0), Record(Gender.F,71.0,166.0), Record(Gender.M,75.0,178.0), Record(Gender.M,79.0,173.0), Record(Gender.F,52.0,164.0), Record(Gender.F,68.0,169.0), Record(Gender.M,64.0,176.0), Record(Gender.F,56.0,166.0), Record(Gender.M,69.0,174.0), Record(Gender.M,88.0,178.0), Record(Gender.M,65.0,187.0), Record(Gender.F,54.0,164.0), Record(Gender.M,80.0,178.0), Record(Gender.F,63.0,163.0), Record(Gender.M,78.0,183.0), Record(Gender.M,85.0,179.0), Record(Gender.F,54.0,160.0), Record(Gender.M,73.0,180.0), Record(Gender.F,49.0,161.0), Record(Gender.F,54.0,174.0), Record(Gender.F,75.0,162.0), Record(Gender.M,82.0,182.0), Record(Gender.F,56.0,165.0), Record(Gender.M,74.0,169.0), Record(Gender.M,102.0,185.0), Record(Gender.M,64.0,177.0), Record(Gender.M,65.0,176.0), Record(Gender.F,66.0,170.0), Record(Gender.M,73.0,183.0), Record(Gender.M,75.0,172.0), Record(Gender.M,57.0,173.0), Record(Gender.M,68.0,165.0), Record(Gender.M,71.0,177.0), Record(Gender.M,71.0,180.0), Record(Gender.F,78.0,173.0), Record(Gender.M,97.0,189.0), Record(Gender.F,60.0,162.0), Record(Gender.F,64.0,165.0), Record(Gender.F,64.0,164.0), Record(Gender.F,52.0,158.0), Record(Gender.M,80.0,178.0), Record(Gender.F,62.0,175.0), Record(Gender.M,66.0,173.0), Record(Gender.F,55.0,165.0), Record(Gender.F,56.0,163.0), Record(Gender.F,50.0,166.0), Record(Gender.F,50.0,171.0), Record(Gender.F,50.0,160.0), Record(Gender.F,63.0,160.0), Record(Gender.M,69.0,182.0), Record(Gender.M,69.0,183.0), Record(Gender.F,61.0,165.0), Record(Gender.M,55.0,168.0), Record(Gender.F,53.0,169.0), Record(Gender.F,60.0,167.0), Record(Gender.F,56.0,170.0), Record(Gender.M,59.0,182.0), Record(Gender.M,62.0,178.0), Record(Gender.F,53.0,165.0), Record(Gender.F,57.0,163.0), Record(Gender.F,57.0,162.0), Record(Gender.M,70.0,173.0), Record(Gender.F,56.0,161.0), Record(Gender.M,84.0,184.0), Record(Gender.M,69.0,180.0), Record(Gender.M,88.0,189.0), Record(Gender.F,56.0,165.0), Record(Gender.M,103.0,185.0), Record(Gender.F,50.0,169.0), Record(Gender.F,52.0,159.0), Record(Gender.F,55.0,155.0), Record(Gender.F,55.0,164.0), Record(Gender.M,63.0,178.0), Record(Gender.F,47.0,163.0), Record(Gender.F,45.0,163.0), Record(Gender.F,62.0,175.0), Record(Gender.F,53.0,164.0), Record(Gender.F,52.0,152.0), Record(Gender.F,57.0,167.0), Record(Gender.F,64.0,166.0), Record(Gender.F,59.0,166.0), Record(Gender.M,84.0,183.0), Record(Gender.M,79.0,179.0), Record(Gender.F,55.0,174.0), Record(Gender.M,67.0,179.0), Record(Gender.F,76.0,167.0), Record(Gender.F,62.0,168.0), Record(Gender.M,83.0,184.0), Record(Gender.M,96.0,184.0), Record(Gender.M,75.0,169.0), Record(Gender.M,65.0,178.0), Record(Gender.M,78.0,178.0), Record(Gender.M,69.0,167.0), Record(Gender.F,68.0,178.0), Record(Gender.F,55.0,165.0), Record(Gender.M,67.0,179.0), Record(Gender.F,52.0,169.0), Record(Gender.F,47.0,153.0), Record(Gender.F,45.0,157.0), Record(Gender.F,68.0,171.0), Record(Gender.F,44.0,157.0), Record(Gender.F,62.0,166.0), Record(Gender.M,87.0,185.0), Record(Gender.F,56.0,160.0), Record(Gender.F,50.0,148.0), Record(Gender.M,83.0,177.0), Record(Gender.F,53.0,162.0), Record(Gender.F,64.0,172.0), Record(Gender.F,62.0,167.0), Record(Gender.M,90.0,188.0), Record(Gender.M,85.0,191.0), Record(Gender.M,66.0,175.0), Record(Gender.F,52.0,163.0), Record(Gender.F,53.0,165.0), Record(Gender.F,54.0,176.0), Record(Gender.F,64.0,171.0), Record(Gender.F,55.0,160.0), Record(Gender.F,55.0,165.0), Record(Gender.F,59.0,157.0), Record(Gender.F,70.0,173.0), Record(Gender.M,88.0,184.0), Record(Gender.F,57.0,168.0), Record(Gender.F,47.0,162.0), Record(Gender.F,47.0,150.0), Record(Gender.F,55.0,162.0), Record(Gender.F,48.0,163.0), Record(Gender.M,54.0,169.0), Record(Gender.M,69.0,172.0), Record(Gender.F,59.0,170.0), Record(Gender.F,58.0,169.0), Record(Gender.F,57.0,167.0), Record(Gender.F,51.0,163.0), Record(Gender.F,54.0,161.0), Record(Gender.F,53.0,162.0), Record(Gender.F,59.0,172.0), Record(Gender.M,56.0,163.0), Record(Gender.F,59.0,159.0), Record(Gender.F,63.0,170.0), Record(Gender.F,66.0,166.0), Record(Gender.M,96.0,191.0), Record(Gender.F,53.0,158.0), Record(Gender.M,76.0,169.0), Record(Gender.F,54.0,163.0), Record(Gender.M,61.0,170.0), Record(Gender.M,82.0,176.0), Record(Gender.M,62.0,168.0), Record(Gender.M,71.0,178.0), Record(Gender.F,60.0,174.0), Record(Gender.M,66.0,170.0), Record(Gender.M,81.0,178.0), Record(Gender.M,68.0,174.0), Record(Gender.M,80.0,176.0), Record(Gender.F,43.0,154.0), Record(Gender.M,82.0,181.0), Record(Gender.F,63.0,165.0), Record(Gender.M,70.0,173.0), Record(Gender.F,56.0,162.0), Record(Gender.F,60.0,172.0), Record(Gender.F,58.0,169.0), Record(Gender.M,76.0,183.0), Record(Gender.F,50.0,158.0), Record(Gender.M,88.0,185.0), Record(Gender.M,89.0,173.0), Record(Gender.F,59.0,164.0), Record(Gender.F,51.0,156.0), Record(Gender.F,62.0,164.0), Record(Gender.M,74.0,175.0), Record(Gender.M,83.0,180.0), Record(Gender.M,81.0,175.0), Record(Gender.M,90.0,181.0), Record(Gender.M,79.0,177.0) )
anesabml avatar

Sketch created by

anesabml