import io.data2viz.charts.* import io.data2viz.charts.core.* import io.data2viz.charts.dimension.* import io.data2viz.charts.chart.* import io.data2viz.charts.chart.mark.* import io.data2viz.charts.viz.* import io.data2viz.charts.layout.* import io.data2viz.charts.config.* import io.data2viz.geom.* import kotlin.random.Random val width = 700.0 val height = 500.0 val randomPoints = (1 .. 300).map{ Point(Random.nextDouble(), Random.nextDouble()) } fun main() { // Creating and sizing the VizContainer val vc = newVizContainer().apply { size = Size(width, height) } // Chart DSL, our domain object is a "Point" vc.chart(randomPoints) { title = "Zooming-in with points size bound to zoom ratio" // display the cursor, enable zoom & pan config { events { zoomMode = ZoomMode.XY panMode = PanMode.XY } cursor { show = true } } // Create 2 continuous numeric dimensions val xPosition = quantitative( { domain.x } ) val yPosition = quantitative( { domain.y } ) // Plot values plot(xPosition, yPosition) { // Bind the size of the dots to the zoom ratio // Note that "size" is relative to the area of the dots, so we use ratio² size = discrete( { zoom.xZoom.ratio * zoom.xZoom.ratio * 15.0 } ) // Set some limit values, so the zoom/pan cannot go further x { min = .0 max = 1.0 } y { min = .0 max = 1.0 } } } }