import io.data2viz.charts.*
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.core.*
import io.data2viz.geom.*
import io.data2viz.color.*
val width = 600.0
val height = 300.0
fun main() {
    
    // Creating 2 VizContainers for our charts
    val vc1 = newVizContainer().apply {
        size = Size(width, height)
    }
    val vc2 = newVizContainer().apply {
        size = Size(width, height)
    }
    
    // Creating the 2 charts
    val chart1 = createChart(vc1, set1)
    val chart2 = createChart(vc2, set2)
    
    // Creating a SizeManager to synchronize the charts' widths
    sizeManager().vSynchro().addAllCharts(chart1, chart2)
    
    // Syncing the zoom, pan & highlight between the charts
    chart1.onHighlight { evt -> chart2.highlight(evt.data) }
    chart2.onHighlight { evt -> chart1.highlight(evt.data) }
    
   	chart1.onZoom { evt -> chart2.zoom(evt.zoomOriginX, evt.zoomOriginY, evt.zoomFactorX, evt.zoomFactorY) } 
    chart2.onZoom { evt -> chart1.zoom(evt.zoomOriginX, evt.zoomOriginY, evt.zoomFactorX, evt.zoomFactorY) } 
    
    chart1.onPan { evt -> chart2.pan(evt.panX, evt.panY) } 
    chart2.onPan { evt -> chart1.pan(evt.panX, evt.panY) } 
}
private fun createChart(vc: VizContainer, dataset:List<Stock>): Chart<Stock> {
    return vc.chart(dataset) {
        config {
            events {
                // Switch the cursor mode to column
                triggerMode = TriggerMode.Column
                // Enable only X-axis zoom & pan
                zoomMode = ZoomMode.X
                panMode = PanMode.X
            }
            
            // Display the cursor and set it to "vertical"
            cursor {
                show = true
                type = CursorType.Vertical
            }
        }
        
        
        val day = quantitative( { domain.day.toDouble() } )
        val closingPrice = quantitative( { domain.closingPrice } )
        
        // Plot values
        line(day, closingPrice) {
            curve = MarkCurves.Curved
            
            // set limits, so user can only zoom-in
            x {
                min = 1.0
                max = 32.0
            }
        }
    }
}
data class Stock(val day: Int, val closingPrice: Double)
val set1 = listOf(
    Stock(1,92.830017),
    Stock(2,92.512085),
    Stock(3,97.305908),
    Stock(4,98.011322),
    Stock(5,99.490204),
    Stock(6,98.095734),
    Stock(7,96.590485),
    Stock(8,93.003815),
    Stock(9,93.609863),
    Stock(10,93.073364),
    Stock(11,94.712708),
    Stock(12,91.130981),
    Stock(13,94.988434),
    Stock(14,95.115601),
    Stock(15,94.518982),
    Stock(16,91.285034),
    Stock(17,93.038635),
    Stock(18,94.722656),
    Stock(19,93.00882),
    Stock(20,92.536896),
    Stock(21,92.204041),
    Stock(22,93.585083),
    Stock(23,92.736603),
    Stock(24,94.528961),
    Stock(25,95.006348),
    Stock(26,93.893066),
    Stock(27,90.495178),
    Stock(28,89.966125),
    Stock(29,88.994965),
    Stock(30,84.921448),
    Stock(31,86.312408),
    Stock(32,82.536926)
)
val set2 = listOf(
    Stock(1,124592.472351),
    Stock(2,124488.438568),
    Stock(3,124594.121613),
    Stock(4,124688.751556),
    Stock(5,124580.480347),
    Stock(6,124697.350616),
    Stock(7,124397.469849),
    Stock(8,125101.339661),
    Stock(9,125204.096741),
    Stock(10,125301.935791),
    Stock(11,125498.120605),
    Stock(12,125506.883606),
    Stock(13,125609.620819),
    Stock(14,125707.564178),
    Stock(15,125812.124542),
    Stock(16,125720.127472),
    Stock(17,125127.991333),
    Stock(18,125225.845276),
    Stock(19,125333.99231),
    Stock(20,126432.924255),
    Stock(21,126537.270966),
    Stock(22,126635.929688),
    Stock(23,126740.683777),
    Stock(24,126854.985748),
    Stock(25,126849.014587),
    Stock(26,126851.652435),
    Stock(27,126951.329529),
    Stock(28,126950.554565),
    Stock(29,126941.836273),
    Stock(30,127738.542694),
    Stock(31,127833.838287),
    Stock(32,127237.787628)
)
         
      
comments