KoalaPlot / koalaplot-core

Koala Plot is a Compose Multiplatform based charting and plotting library written in Kotlin
https://koalaplot.github.io/
MIT License
382 stars 18 forks source link

Maven Central Kotlin Dokka docs License MIT

Koala Plot

Koala Plot is a Compose Multiplatform based charting and plotting library allowing you to build great looking interactive charts for Android, desktop, ios, and web using a single API and code base.

Try out the web version of the samples for a quick look at the possibilities when using Koala Plot. Note that this uses the alpha Kotlin wasm Compose web-canvas capability, and you'll need a browser supporting the wasm garbage collection feature. For more information see https://kotl.in/wasm_help.

This project is in a pre-release experimental/alpha state. We encourage you to give it a try, make suggestions for improvement, and even contribute! It is expected that the API surface and functionality will change as we gain experience using the library in applications.

Current Features

Most elements of a plot are Composables and can therefore be easily customized. This includes things like colors, fonts, borders, shapes, user interaction, etc. Web support is provided by the Compose-web Canvas support currently in alpha.

Getting Started

  1. Add the mavenCentral and compose repositories to your project's build.gradle.kts
repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
  1. Include Koala Plot core as a dependency in your project's build.gradle.kts
dependencies {
    implementation("io.github.koalaplot:koalaplot-core:0.6.0")
}

You can also see a complete example of a build.gradle.kts in the samples.

  1. Start coding
BulletGraphs {
    bullet(FloatLinearAxisModel(0f..300f)) {
        label {
            Column(
                horizontalAlignment = Alignment.End,
                modifier = Modifier.padding(end = KoalaPlotTheme.sizes.gap)
            ) {
                Text("Revenue 2005 YTD", textAlign = TextAlign.End)
                Text("(US $ in thousands)", textAlign = TextAlign.End, style = MaterialTheme.typography.labelSmall)
            }
        }
        axis { labels { Text("${it.toInt()}") } }
        comparativeMeasure(260f)
        featuredMeasureBar(275f)
        ranges(0f, 200f, 250f, 300f)
    }
}

Documentation

Also see the sample repository for code examples.

Contributing

Contributions are welcome. Further details can be found in the Contributing Guidelines

Examples