【问题标题】:Filling a line chart with generated data in TornadoFX在 TornadoFX 中使用生成的数据填充折线图
【发布时间】:2019-12-30 22:55:37
【问题描述】:

我正在尝试使用 TornadoFX 将数据表转换为一系列折线图。表中的每一行都应对应于图表中的命名行。首先,我遵循了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 )
    }
}

我的最终目标是“自动生成”data("Month", values...) 的新行,因此我可以通过将更多值附加到“行数据”列表来为图表创建更多行。但是,我对linechart 方法创建折线图的方式以及对multiseriesdata 的后续调用如何转换为参数(通过这些块)感到完全迷茫。

我是 TornadoFX 的新手,对 Kotlin 也有些陌生。所以,我不知道语言或库中是否有一个技巧可以解决我的问题。非常感谢您的帮助!

【问题讨论】:

  • 图表值是否会绑定到对象列表(意味着图表会立即在图表中看到更改)还是更像是从列表中生成图表的按钮(没有实时更改,就在点击按钮时)?

标签: kotlin jvm linechart variadic tornadofx


【解决方案1】:

假设您有一个列表myList,每个元素中都有各自的属性a b c,那么可以使用myList 中的循环为每个项目调用data(),即

myList.forEach { item ->
    data( item.a, item.b, item.c)
}

而不是为每个数据点手动调用data()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多