MultiChart.mxml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="0" width="100%" creationPolicy="all" creationComplete="creationCompleteHandler()">
  3. <mx:Script>
  4. <![CDATA[
  5. import mx.charts.chartClasses.ChartBase;
  6. import mx.core.Container;
  7. import mx.charts.series.PieSeries;
  8. import mx.charts.series.BubbleSeries;
  9. import mx.charts.series.BarSeries;
  10. import mx.charts.series.ColumnSeries;
  11. import mx.charts.series.PlotSeries;
  12. import mx.charts.series.AreaSeries;
  13. import mx.charts.series.LineSeries;
  14. import mx.collections.ArrayCollection;
  15. import mx.collections.ListCollectionView;
  16. import mx.collections.Sort;
  17. [Bindable] public var controlBarHorizontalAlign:String = "center";
  18. [Bindable] public var dataProvider:ListCollectionView = new ListCollectionView;
  19. [Bindable] public var showDataTips:Boolean = true;
  20. [Bindable] public var xField:String = 'x';
  21. [Bindable] public var yField:String = 'y';
  22. [Bindable] public var zField:String = 'z';
  23. [Bindable] public var labelField:String = 'label';
  24. [Bindable] public var legendHeight:int = 80;
  25. [Bindable] public var legendDirection:String = "horizontal";
  26. public function creationCompleteHandler():void {
  27. this.refresh();
  28. }
  29. public function refresh():void {
  30. if( this.dataProvider.length > 0 ) {
  31. bindDataProvider();
  32. }
  33. }
  34. protected function bindDataProvider():void {
  35. if( this.lineChart.hasOwnProperty("series") == true ) {
  36. this.lineChart.series = new Array;
  37. }
  38. if( this.areaChart.hasOwnProperty("series") == true ) {
  39. this.areaChart.series = new Array;
  40. }
  41. if( this.plotChart.hasOwnProperty("series") == true ) {
  42. this.plotChart.series = new Array;
  43. }
  44. if( this.columnChart.hasOwnProperty("series") == true ) {
  45. this.columnChart.series = new Array;
  46. }
  47. if( this.barChart.hasOwnProperty("series") == true ) {
  48. this.barChart.series = new Array;
  49. }
  50. if( this.bubbleChart.hasOwnProperty("series") == true ) {
  51. this.bubbleChart.series = new Array;
  52. }
  53. var listCollectionView:ListCollectionView;
  54. var distinctXFieldValues:ArrayCollection = new ArrayCollection;
  55. for each( listCollectionView in this.dataProvider ) {
  56. var lineSeries:LineSeries = new LineSeries;
  57. var areaSeries:AreaSeries = new AreaSeries;
  58. var plotSeries:PlotSeries = new PlotSeries;
  59. var columnSeries:ColumnSeries = new ColumnSeries;
  60. var barSeries:BarSeries = new BarSeries;
  61. var bubbleSeries:BubbleSeries = new BubbleSeries;
  62. var pieSeries:PieSeries = new PieSeries;
  63. // Parse thru collection for distinct category axis values
  64. var object:Object;
  65. for each( object in listCollectionView) {
  66. if( distinctXFieldValues.contains(object[this.xField]) == false ) {
  67. distinctXFieldValues.addItem(object[this.xField]);
  68. }
  69. }
  70. lineSeries.dataProvider = listCollectionView;
  71. lineSeries.xField = this.xField;
  72. lineSeries.yField = this.yField;
  73. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  74. lineSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  75. }
  76. this.lineChart.series.push(lineSeries);
  77. areaSeries.dataProvider = listCollectionView;
  78. areaSeries.xField = this.xField;
  79. areaSeries.yField = this.yField;
  80. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  81. areaSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  82. }
  83. this.areaChart.series.push(areaSeries);
  84. plotSeries.dataProvider = listCollectionView;
  85. plotSeries.xField = this.xField;
  86. plotSeries.yField = this.yField;
  87. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  88. plotSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  89. }
  90. this.plotChart.series.push(plotSeries);
  91. columnSeries.dataProvider = listCollectionView;
  92. columnSeries.xField = this.xField;
  93. columnSeries.yField = this.yField;
  94. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  95. columnSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  96. }
  97. this.columnChart.series.push(columnSeries);
  98. barSeries.dataProvider = listCollectionView;
  99. barSeries.xField = this.yField;
  100. barSeries.yField = this.xField;
  101. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  102. barSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  103. }
  104. this.barChart.series.push(barSeries);
  105. bubbleSeries.dataProvider = listCollectionView;
  106. bubbleSeries.xField = this.xField;
  107. bubbleSeries.yField = this.yField;
  108. bubbleSeries.radiusField = this.zField;
  109. if( listCollectionView.getItemAt(0).hasOwnProperty(labelField) == true ) {
  110. bubbleSeries.displayName = listCollectionView.getItemAt(0)[labelField];
  111. }
  112. this.bubbleChart.series.push(bubbleSeries);
  113. }
  114. distinctXFieldValues.sort = new Sort;
  115. distinctXFieldValues.refresh();
  116. lineChartHorizontalCategoryAxis.dataProvider = distinctXFieldValues;
  117. areaChartHorizontalCategoryAxis.dataProvider = distinctXFieldValues;
  118. plotChartHorizontalCategoryAxis.dataProvider = distinctXFieldValues;
  119. columnChartHorizontalCategoryAxis.dataProvider = distinctXFieldValues;
  120. barChartVerticalCategoryAxis.dataProvider = distinctXFieldValues;
  121. bubbleChartHorizontalCategoryAxis.dataProvider = distinctXFieldValues;
  122. }
  123. ]]>
  124. </mx:Script>
  125. <mx:ControlBar width="100%" horizontalAlign="{controlBarHorizontalAlign}">
  126. <mx:ToggleButtonBar dataProvider="chartViewStack" height="24"/>
  127. </mx:ControlBar>
  128. <mx:ViewStack id="chartViewStack" width="100%" height="100%">
  129. <mx:VBox icon="@Embed(source='images/chart_line.png')" width="100%" height="100%">
  130. <mx:LineChart id="lineChart" width="100%" height="100%" showDataTips="{this.showDataTips}" seriesFilters="{new Array}">
  131. <mx:verticalAxis>
  132. <mx:LinearAxis/>
  133. </mx:verticalAxis>
  134. <mx:horizontalAxis>
  135. <mx:CategoryAxis id="lineChartHorizontalCategoryAxis"/>
  136. </mx:horizontalAxis>
  137. </mx:LineChart>
  138. </mx:VBox>
  139. <mx:VBox icon="@Embed(source='images/chart_bubble.png')" width="100%" height="100%">
  140. <mx:BubbleChart id="bubbleChart" width="100%" height="100%" showDataTips="{this.showDataTips}">
  141. <mx:verticalAxis>
  142. <mx:LinearAxis/>
  143. </mx:verticalAxis>
  144. <mx:horizontalAxis>
  145. <mx:CategoryAxis id="bubbleChartHorizontalCategoryAxis"/>
  146. </mx:horizontalAxis>
  147. </mx:BubbleChart>
  148. </mx:VBox>
  149. <mx:VBox icon="@Embed(source='images/chart_area.png')" width="100%" height="100%">
  150. <mx:AreaChart id="areaChart" width="100%" height="100%" showDataTips="{this.showDataTips}">
  151. <mx:verticalAxis>
  152. <mx:LinearAxis/>
  153. </mx:verticalAxis>
  154. <mx:horizontalAxis>
  155. <mx:CategoryAxis id="areaChartHorizontalCategoryAxis"/>
  156. </mx:horizontalAxis>
  157. </mx:AreaChart>
  158. </mx:VBox>
  159. <mx:VBox icon="@Embed(source='images/chart_plot.png')" width="100%" height="100%">
  160. <mx:PlotChart id="plotChart" width="100%" height="100%" showDataTips="{this.showDataTips}">
  161. <mx:verticalAxis>
  162. <mx:LinearAxis/>
  163. </mx:verticalAxis>
  164. <mx:horizontalAxis>
  165. <mx:CategoryAxis id="plotChartHorizontalCategoryAxis"/>
  166. </mx:horizontalAxis>
  167. </mx:PlotChart>
  168. </mx:VBox>
  169. <mx:VBox icon="@Embed(source='images/chart_column.png')" width="100%" height="100%">
  170. <mx:ColumnChart id="columnChart" width="100%" height="100%" showDataTips="{this.showDataTips}">
  171. <mx:verticalAxis>
  172. <mx:LinearAxis/>
  173. </mx:verticalAxis>
  174. <mx:horizontalAxis>
  175. <mx:CategoryAxis id="columnChartHorizontalCategoryAxis"/>
  176. </mx:horizontalAxis>
  177. </mx:ColumnChart>
  178. </mx:VBox>
  179. <mx:VBox icon="@Embed(source='images/chart_bar.png')" width="100%" height="100%">
  180. <mx:BarChart id="barChart" width="100%" height="100%" showDataTips="{this.showDataTips}">
  181. <mx:verticalAxis>
  182. <mx:CategoryAxis id="barChartVerticalCategoryAxis"/>
  183. </mx:verticalAxis>
  184. <mx:horizontalAxis>
  185. <mx:LinearAxis/>
  186. </mx:horizontalAxis>
  187. </mx:BarChart>
  188. </mx:VBox>
  189. </mx:ViewStack>
  190. <mx:Legend width="100%" height="{legendHeight}" direction="{legendDirection}" dataProvider="{ChartBase(Container(chartViewStack.selectedChild).getChildAt(0))}"/>
  191. </mx:Panel>