2014年1月28日 星期二

JavaFX Chart

圖表 (Chart) 常運用於試算表如Microsoft Excel、Mac Numbers、Apache OpenOffice Calc等辦公室軟體,透過圖表讓資料以更簡單明瞭的方式呈現。Java Swing並沒有提供圖表的類別,因此若需使用圖表,只能自行開發或使用Third-Party軟體廠商所提供的API套件。此外,圖表亦常與商業智慧 (Business Intelligence) 搭配,透過商業智慧軟體與資料庫或資料倉儲整合,提供向下分析與互動功能的動態圖表,根據指標在特定期間的變化,以動態的方式呈現資訊,使圖表產生更多樣化的呈現,常見的商業智慧軟體有SAP BusinessObjects、SAS Business Intelligence、Oracle Business Intelligence、IBM Cognos、MicroStrategy等,下圖為商業智慧之示範:
有鑑於圖表的重要性,因此JavaFX內建圖表,包括圓形圖、區域圖、長條圖、折線圖、散佈圖、泡泡圖、堆疊區域圖與堆疊長條圖等,分別由以下類別建立:
  • 圓形圖:javafx.scene.chart.PieChart類別。
  • 區域圖:javafx.scene.chart.AreaChart類別。
  • 長條圖:javafx.scene.chart.BarChart類別。
  • 泡泡圖:javafx.scene.chart.BubbleChart類別。
  • 折線圖:javafx.scene.chart.LineChart類別。
  • 散佈圖:javafx.scene.chart.ScatterChart類別。
  • 堆疊區域圖:javafx.scene.chart.StackedAreaChart類別。
  • 堆疊長條圖:javafx.scene.chart.StackedBarChart類別。
除了PieChart類別之外,其餘類別皆繼承自XYChart抽象類別,主要原因是此類型的圖表皆以XY座標軸 (橫軸與縱軸) 描述資料,由於皆繼承自XYChart抽象類別,因此其處理方式均十分類似。

PieChart類別與繼承自XYChart抽象類別的圖表類別之最大差別在於,前者僅以PieChart.Data類別設定各扇形區域的資料,而後者則是先以XYChart.Series類別設定各數列,再以XYChart.Data類別設定各數列的資料,因此可允許多個數列資料在同一圖表中。

此外,PieChart類別與XYChart抽象類別繼承自Chart抽象類別,為JavaFX圖表的基礎類別。Chart抽象類別分別定義以下的屬性值:
  • animated:當資料改變時,是否以動態的方式顯示圖表。
  • legend:圖表圖例 (Legend)。
  • legendSide:圖表圖例的置放位置。
  • legendVisible:是否顯示圖表圖例。
  • title:圖表標題 (Title)。
  • titleSide:圖表標題的置放位置。
為描述XY座標軸的類型,分別由CategoryAxisNumberAxis類別以文字與數值做為座標軸的資料:
  • 類別座標軸:javafx.scene.chart.CategoryAxis類別。
  • 數值座標軸:javafx.scene.chart.NumberAxis類別。
除了上述類別之外,JavaFX並提供各類別對應的Builder類別,透過Builder類別可精簡程式長度:
  • 圓形圖:javafx.scene.chart.PieChartBuilder類別。
  • 區域圖:javafx.scene.chart.AreaChartBuilder類別。
  • 長條圖:javafx.scene.chart.BarChartBuilder類別。
  • 泡泡圖:javafx.scene.chart.BubbleChartBuilder類別。
  • 折線圖:javafx.scene.chart.LineChartBuilder類別。
  • 散佈圖:javafx.scene.chart.ScatterChartBuilder類別。
  • 堆疊區域圖:javafx.scene.chart.StackedAreaChartBuilder類別。
  • 堆疊長條圖:javafx.scene.chart.StackedBarChartBuilder類別。
圓形圖 (Pie Chart) 又稱為圓餅圖,圓形圖將圖表劃分成幾個不同比例的扇形區域 (Slice),藉以描述量、頻率或百分比之間的相對關係,在圓形圖中,每個扇形區域的面積大小代表數量的比例,由於圓形圖以面積取代長度表達相對關係,反而加大了對各數據比較的難度,因此若需要進行數據比較,建議使用折線圖或長條圖。下圖為圓形圖之示範
區域圖 (Area Chart) 用以強調一段時間的變動程度,例如可使用區域圖繪製代表一段時間內利潤的資料,強調利潤總和。區域圖也可藉由顯示繪製值的總和,顯示部分與整體的關係。下圖為區域圖向下分析示範
向下分析 (Drill-Down Analysis) 是商業智慧一個特殊的功能,將資料或數個圖表建立主從 (Master-Detail) 關聯,當點選主要圖表資料時,則顯示其對應的次要圖表資料。

長條圖 (Bar Chart) 用以顯示一段時間內資料的變更或比較不同項目間的差異,長條圖又可分為水平長條圖與垂直長條圖。但與區域圖不同的是,長條圖須同時以CategoryAxisNumberAxis類別設定座標軸的類型,若以CategoryAxis設定水平座標軸 (則為類別)、NumberAxis設定垂直座標軸 (則為數值),則為垂直長條圖;反之,若以NumberAxis設定水平座標軸 (則為數值)、CategoryAxis設定垂直座標軸 (則為類別),則為水平長條圖,在開發長條圖時須特別注意。下圖為長條圖向下分析示範
折線圖 (Line Chart) 用以顯示一段時間內的連續資料,且根據一般的比例進行設定,因此適合顯示相等間隔內資料的趨勢,在折線圖中,類別資料沿著水平座標軸均勻分散,所有資料沿著垂直座標軸均勻分散。下圖為折線圖向下分析示範
散佈圖 (Scatter Chart) 與折線圖十分類似,同樣用以顯示一段時間內的連續資料,且根據一般的比例進行設定,因此適合顯示相等間隔內資料的趨勢。兩者的差別在於,在散佈圖中,其水平與垂直座標軸均為數值資料,水平與垂直的交會為單一座標點,座標點依據資料會平均或不平均的分佈在散佈圖上。下圖為散佈示範
泡泡圖 (Bubble Chart) 為散佈圖的變化,泡泡圖常用以顯示財務資料,座標點以泡泡呈現,不同的泡泡大小用以強調數值的大小。與散佈圖不同的是,為處理泡泡的大小,因此需以XYChart.Data類別分別設定X座標軸資料、Y座標軸資料與泡泡的大小。下圖為泡泡示範
堆疊區域圖 (Stacked Area Chart) 類似於區域圖,不同的是,堆疊區域圖在資料數列上堆疊兩個以上的資料數列,而且Y座標軸資料為個類別資料的加總。下圖為堆疊區域向下分析示範
堆疊長條圖 (Stacked Bar Chart) 類似於長條圖,不同的是,堆疊長條圖在資料數列上堆疊兩個以上的資料數列。下圖為堆疊長條向下分析示範
除了以類別處理之外,亦可使用CSS設定圖表樣式,其中較特殊的是長條圖,可使用圖像代替原有的長條樣式:
參考資料】

[1] 黃嘉輝,深入研究JavaFX 2。
[2] 黃嘉輝,深入研究Java Swing。
[5] JavaFX 2.2 API Specification.
[6] Java Platform, Standard Edition 7 API Specification.

© Chia-Hui Huang

沒有留言:

張貼留言