在 TornadoFX 中使用生成的数据填充折线图
Filling a line chart with generated data in TornadoFX
我正在尝试使用 TornadoFX 将 table 数据转换为一系列折线图。 table 中的每一行都应对应于图表中的命名行。作为开始,我遵循了 TornadoFX guide,但这只涵盖了具有硬编码值的用例。
这是 TornadoFX 指南示例:
linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
multiseries("Product X", "Product Y") {
data("MAR", 10245, 28443)
data("APR", 23963, 22845)
data("MAY", 15038, 19045)
}
}
我成功地为该系列创建了标签,但仅此而已:
val multiSeriesHeader = table.columHeaders.map { it.toString() }.toTypedArray()
linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
multiseries(*multiSeriesHeader) {
// Here I want something like:
// multidata( array of lines in the matrix, in the "data" format )
}
}
我的最终目标是 "automatically generate" 新行 data("Month", values...)
,这样我就可以通过将更多值附加到 "line-data" 列表来为图表创建更多行。然而,我对 linechart
方法创建折线图的方式以及对 multiseries
和 data
的后续调用如何转换为参数(通过这些块)感到完全迷失。
我是 TornadoFX 的新手,对 Kotlin 有点陌生。所以,我不知道语言或库中是否有技巧可以解决我的问题。非常感谢您的帮助!
假设您有一个列表 myList
,每个元素中都有各自的属性 a b c
,那么可以使用 myList
中的循环为每个项目调用 data()
,即
myList.forEach { item ->
data( item.a, item.b, item.c)
}
而不是为每个数据点手动调用data()
我正在尝试使用 TornadoFX 将 table 数据转换为一系列折线图。 table 中的每一行都应对应于图表中的命名行。作为开始,我遵循了 TornadoFX guide,但这只涵盖了具有硬编码值的用例。
这是 TornadoFX 指南示例:
linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
multiseries("Product X", "Product Y") {
data("MAR", 10245, 28443)
data("APR", 23963, 22845)
data("MAY", 15038, 19045)
}
}
我成功地为该系列创建了标签,但仅此而已:
val multiSeriesHeader = table.columHeaders.map { it.toString() }.toTypedArray()
linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
multiseries(*multiSeriesHeader) {
// Here I want something like:
// multidata( array of lines in the matrix, in the "data" format )
}
}
我的最终目标是 "automatically generate" 新行 data("Month", values...)
,这样我就可以通过将更多值附加到 "line-data" 列表来为图表创建更多行。然而,我对 linechart
方法创建折线图的方式以及对 multiseries
和 data
的后续调用如何转换为参数(通过这些块)感到完全迷失。
我是 TornadoFX 的新手,对 Kotlin 有点陌生。所以,我不知道语言或库中是否有技巧可以解决我的问题。非常感谢您的帮助!
假设您有一个列表 myList
,每个元素中都有各自的属性 a b c
,那么可以使用 myList
中的循环为每个项目调用 data()
,即
myList.forEach { item ->
data( item.a, item.b, item.c)
}
而不是为每个数据点手动调用data()