import io.data2viz.color.*
import io.data2viz.geom.*
import io.data2viz.math.*
import io.data2viz.viz.*
import io.data2viz.shape.*
import io.data2viz.color.Colors.Web
fun main() {
viz {
size = size(600, 600) //<- you need a viz size
// but change everything from here
val radius: Double = 600.0 / 2.0 - 20.0
val data: Array<Pair<String, Double>> = arrayOf(
"a" to 10.0,
"b" to 5.0,
"c" to 6.0,
"d" to 8.0
)
val totalCount: Double = data.sumByDouble { it.second }
val arcParams: Array<ArcParams<Pair<String, Double>>> = pie<Pair<String, Double>> {
value = { (it.second / totalCount) * PI * 2 }
}.render(data)
val colorOf: (Pair<String, Double>) -> Color = {
listOf(
Web.purple,
Web.navy,
Web.teal,
Web.lime,
Web.yellow,
Web.red,
Web.gray
)[data.indexOf(it)]
}
val arcBuilder: ArcBuilder<Pair<String, Double>> = arcBuilder {
startAngle = { data ->
arcParams.find{ it.data == data }!!.startAngle
}
endAngle = { data ->
arcParams.find { it.data == data }!!.endAngle
}
padAngle = { data ->
arcParams.find { it.data == data }!!.padAngle ?: 0.0
}
outerRadius = { radius }
}
group {
transform {
translate(300.0, 300.0)
}
arcParams.forEach {
arcBuilder.buildArcForDatum(it.data!!, path {
fill = colorOf(it.data!!)
stroke = Web.black
strokeWidth = 2.0
})
}
}
// to here
}.bindRendererOnNewCanvas()
}
comments