美文网首页 TornadoFX 教程
TornadoFX编程指南,第8章,图表

TornadoFX编程指南,第8章,图表

作者: 公子小水 | 来源:发表于2017-08-16 23:05 被阅读198次

    译自《Charts

    图表

    JavaFX提供了一组方便的图表(handy set of charts),可快速显示数据可视化。 虽然有更丰富的图表库,如JFreeChartOrson Charts,可以与TornadoFX一起使用,但内置的JavaFX图表可满足大多数可视化需求。 当数据填充(populated)或更改(changed)时,它们也具有优雅的动画。

    TornadoFX带有几个构建器,以使用函数结构简化图表声明。

    饼图

    PieChart是一个常见的视觉辅助,以说明整体的比例。 它在结构上比XY图更简单,这个我们稍后将会了解。 在piechart()构建器中,您可以调用data()函数来传递多个类别值对(category-value pairs)(图8.1)。

    piechart("Desktop/Laptop OS Market Share") {
        data("Windows", 77.62)
        data("OS X", 9.52)
        data("Other", 3.06)
        data("Linux", 1.55)
        data("Chrome OS", 0.55)
    }
    
    图8.1

    注意,您还可以提供一个预先准备的明确的ObservableList<PieChart.Data>

    val items = listOf(
            PieChart.Data("Windows", 77.62),
            PieChart.Data("OS X", 9.52),
            PieChart.Data("Other", 3.06),
            PieChart.Data("Linux", 1.55),
            PieChart.Data("Chrome OS", 0.55)
    ).observable()
    
    piechart("Desktop/Laptop OS Market Share", items)
    

    以下piechart后的代码块可用于修改piechart的任何属性,就像我们涵盖的任何其他控件的构建器一样。 您还可以利用for()循环,序列(Sequences)和其他迭代工具来添加任意数量的数据项。

    val items = listOf(
            PieChart.Data("Windows", 77.62),
            PieChart.Data("OS X", 9.52),
            PieChart.Data("Other", 3.06),
            PieChart.Data("Linux", 1.55),
            PieChart.Data("Chrome OS", 0.55)
    ).observable()
    
    piechart("Desktop/Laptop OS Market Share") {
        for (item in items) {
            data.add(item)
        }
    }
    

    基于映射的数据源(Map-Based Data Sources)

    有时您可能希望使用Map作为数据源来构建图表。 使用Kotlin操作符,可以以Kotlin的方式构造Map,然后将其传递给data函数。

     val items = mapOf(
            "Windows" to 77.62,
            "OS X" to 9.52,
            "Other" to 3.06,
            "Linux" to 1.55,
            "Chrome OS" to 0.55
    )
    
    piechart("Desktop/Laptop OS Market Share") {
        data(items)
    }
    

    基于XY的图表

    大多数图表通常处理XY轴上的一个或多个数据点系列。 最常见的是条状和线状图(bar and line charts)。

    条形图

    您可以通过BarChart表示一个或多个数据点。 该图表可以方便地比较不同数据点与X或Y轴的距离(图8.2)。

     barchart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
        series("Product X") {
            data("MAR", 10245)
            data("APR", 23963)
            data("MAY", 15038)
        }
        series("Product Y") {
            data("MAR", 28443)
            data("APR", 22845)
            data("MAY", 19045)
        }
    }
    
    图8.2

    以上, series()data()函数可以快速构建支持图表的数据结构。 在构建中,您将需要为每个X轴和Y轴构造适当的Axis类型。 在这个例子中,这几个月不一定是数字的,而是字符串。 因此,它们最好由CategoryAxis代表。 已经是数字的单位适合使用NumberAxis

    series()data()块中,您可以自定义其他属性,如颜色。 您甚至可以调用style()来快速将类型安全的CSS应用于图表。

    LineChart和AreaChart

    LineChart将XY轴上的数据点用线连接起来,快速可视化它们之间的向上和向下趋势(图8.3)

    linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
        series("Product X") {
            data("MAR", 10245)
            data("APR", 23963)
            data("MAY", 15038)
        }
        series("Product Y") {
            data("MAR", 28443)
            data("APR", 22845)
            data("MAY", 19045)
        }
    }
    
    图8.3

    后台数据结构与BarChart没有太大的不同,并且以相同的方式使用series()data()函数。

    您还可以使用一个名为AreaChartLineChart变体,它将使线下面的区域以及任何重叠部分具有明显的颜色(图8.4)。

    图8.4

    Multiseries

    您可以使用multiseries()函数简化多个系列的声明,并使用varargs值调用data()函数。 我们可以使用这个结构巩固我们以前的例子:

    linechart("Unit Sales Q2 2016", CategoryAxis(), NumberAxis()) {
    
        multiseries("Product X", "Product Y") {
            data("MAR", 10245, 28443)
            data("APR", 23963, 22845)
            data("MAY", 15038, 19045)
        }
    }
    

    这只是减少样板(boilerplate)的另一个便利,并快速声明图表的数据结构。

    ScatterChart

    ScatterChart是XY数据系列的最简单的表示形式。 它绘制这些数据点,但是不使用条形或线条。 它经常用于绘制大量的数据点(large volume of data points),以便找到集群(clusters)。 以下是两个不同产品系列的ScatterChart,绘制了每周机器容量(machine capacities by week)的简要示例(图8.5)。

    scatterchart("Machine Capacity by Product/Week", NumberAxis(), NumberAxis()) {
        series("Product X") {
            data(1,24)
            data(2,22)
            data(3,23)
            data(4,19)
            data(5,18)
        }
        series("Product Y") {
            data(1,12)
            data(2,15)
            data(3,9)
            data(4,11)
            data(5,7)
        }
    }
    
    图8.5

    BubbleChart

    BubbleChart是类似于ScatterPlot的另一个XY图,但是有第三个变量来控制每个点的半径。 您可以利用此功能来显示,例如,按周计算出的气泡半径(bubble radii),反映使用的机器数量(图8.6)。

     bubblechart("Machine Capacity by Output/Week", NumberAxis(), NumberAxis()) {
        series("Product X") {
            data(1,24,1)
            data(2,46,2)
            data(3,23,1)
            data(4,27,2)
            data(5,18,1)
        }
        series("Product Y") {
            data(1,12,1)
            data(2,31,2)
            data(3,9,1)
            data(4,11,1)
            data(5,15,2)
        }
    }
    
    图8.6

    概要

    图表是可视化数据的有效方法,而TornadoFX中的构建器可以帮助快速创建它们。 您可以在Oracle的文档(Oracle's documentation)中阅读有关JavaFX图表的更多信息。 如果您需要更高级的图表功能,那么您可以使用JFreeChartOrson Charts 等库来利用并与TornadoFX互操作,但这超出了本书的范围。

    相关文章

      网友评论

        本文标题:TornadoFX编程指南,第8章,图表

        本文链接:https://www.haomeiwen.com/subject/mdmkrxtx.html