Flex: Stacked column chart – programmatically in actionscript

By bishopondevelopment

I was looking for ages for an example of a dynamically generated stacked column chart in Flex, but most of the examples were incorporating some MXML, or contained hard-coded series objects.

The example below is based on Adobe Livedocs, but I show how to generate the series arrays programatically in as3, with no use of mxml code, and apply these series to a column chart (added topanelActionscript as seen in the code below). Also, this could be easily adapted to a barchart.

If youve got any suggestions, let me know.

Flex Stacked Chart

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="initApp()" width="622" height="660">

<mx:Script>

<![CDATA[
   import mx.charts.CategoryAxis;
   import mx.charts.series.ColumnSeries;
  import mx.charts.ColumnChart;
  import mx.charts.series.ColumnSet;
   import mx.charts.Legend;
   import mx.charts.BarChart;
   import mx.charts.series.BarSet;
   import mx.charts.series.BarSeries;
   import mx.collections.ArrayCollection;

[Bindable]
     private var yearlyData:ArrayCollection = new ArrayCollection([
        {month:"January", revenue:120, costs:45, overhead:102, oneTime:23},
        {month:"February", revenue:108, costs:42, overhead:87, oneTime:47},
        {month:"March", revenue:150, costs:82, overhead:32, oneTime:21},
        {month:"April", revenue:170, costs:44, overhead:68},
        {month:"May", revenue:250, costs:57, overhead:77, oneTime:17},
        {month:"June", revenue:200, costs:33, overhead:51, oneTime:30},
        {month:"July", revenue:145, costs:80, overhead:62, oneTime:18},
        {month:"August", revenue:166, costs:87, overhead:48},
        {month:"September", revenue:103, costs:56, overhead:42},
        {month:"October", revenue:140, costs:91, overhead:45, oneTime:60},
        {month:"November", revenue:100, costs:42, overhead:33, oneTime:67},
        {month:"December", revenue:182, costs:56, overhead:25, oneTime:48},
        {month:"May", revenue:120, costs:57, overhead:30}
     ]);

private function initApp():void {

// Create a column chart object
        var stackedColumnChart:ColumnChart = new ColumnChart();
        stackedColumnChart.dataProvider = yearlyData;
        stackedColumnChart.showDataTips = true;
 stackedColumnChart.width = 460;
 
 // Set the horizontal axix category
        var xAxis:CategoryAxis = new CategoryAxis();
        xAxis.categoryField = "month";
        stackedColumnChart.horizontalAxis = xAxis;

 // ColumnSet.series is an array which contains
 // an array of ColumnSeries objects.
        var columnSet:ColumnSet = new ColumnSet();
        columnSet.type = "stacked";

// Each item in seriesDetails becomes a different segment of
        // a column in the stacked chart i.e. each item represents a series.
        var seriesDetails:ArrayCollection = new ArrayCollection([
        {YField:"costs", DisplayName:"Recurring Costs"},
        {YField:"overhead", DisplayName:"Overhead Costs"},
        {YField:"oneTime", DisplayName:"One-Time Costs"}
        ]);

// Create a ColumnSeries, and an array to be
        // populated with dynamically generated columnSeries objects
        var columnSeries:ColumnSeries;

var seriesArray:Array = new Array();

// Generate an array of ColumnSeries objects
        // which are then be applied to the ColumnSet series.
        for(var i:int = 0; i < seriesDetails.length; i++){
        columnSeries = new ColumnSeries();
        columnSeries.yField = seriesDetails[i].YField;
        columnSeries.displayName = seriesDetails[i].DisplayName;
        seriesArray.push(columnSeries);
        }
        columnSet.series = seriesArray;

 // c.series could take an array of column sets
 // for displaying mixed charts i.e. c.series = [columnSet1, columnSet2];
 stackedColumnChart.series = [columnSet];

var legend:Legend = new Legend();
        legend.direction = "horizontal";
        legend.dataProvider = stackedColumnChart;

panelActionscript.addChild(stackedColumnChart);
        panelActionscript.addChild(legend);

}

  ]]></mx:Script>
  <mx:VBox height="100%">
    <mx:Panel title="Stacked chart (dynamically created in ActionScript)"
    id="panelActionscript" width="490">
    </mx:Panel>
  </mx:VBox>
  <mx:Panel title="Same chart created solely in MXML" id="panelMxml" width="490">
    <mx:ColumnChart id="mxmlColumnChart" dataProvider="{yearlyData}"
    showDataTips="true" width="470">
      <mx:horizontalAxis>
           <mx:CategoryAxis categoryField="month"/>
       </mx:horizontalAxis>
       <mx:series>
           <mx:ColumnSet type="stacked">
               <mx:ColumnSeries
                   yField="costs"
                   displayName="Recurring Costs"/>
               <mx:ColumnSeries
                   yField="overhead"
                   displayName="Overhead Costs"/>
               <mx:ColumnSeries
                   yField="oneTime"
                   displayName="One-Time Costs"/>
           </mx:ColumnSet>
       </mx:series>
    </mx:ColumnChart>
    <mx:Legend dataProvider="{mxmlColumnChart}" direction="horizontal"/>
  </mx:Panel>
</mx:Application>

flex stacked column graph的更多相关文章

  1. Hello Stacked Column Chart

    <navigation:Page xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/to ...

  2. [转]VS Code 扩展 Angular 6 Snippets - TypeScript, Html, Angular Material, ngRx, RxJS & Flex Layout

    本文转自:https://marketplace.visualstudio.com/items?itemName=Mikael.Angular-BeastCode VSCode Angular Typ ...

  3. FCC---CSS Flexbox: Apply the flex-direction Property to Create a Column in the Tweet Embed

    The tweet embed header and footer used the flex-direction property earlier with a row value. Similar ...

  4. Flex 布局教程:实例篇

    该教程整理自 阮一峰Flexible教程 今天介绍常见布局的Flex写法.你会看到,不管是什么布局,Flex往往都可以几行命令搞定. 我的主要参考资料是Landon Schropp的文章和Solved ...

  5. CSS布局之div交叉排布与底部对齐--flex实现

    最近在用wordpress写页面时,设计师给出了一种网页排布图样,之前从未遇到过,其在电脑上(分辨率大于768px)的效果图如下: 而在手机(分辨率小于等于768px)上要求这样排列: 我想到了两种方 ...

  6. 在移动端中的flex布局

    flex布局介绍: flex布局很灵活, 这种布局我们也可以称之为弹性布局,  弹性布局的主要优势就是元素的宽或者高会自动补全; flex布局实例: 比如有两个div,一个div的宽度为100px, ...

  7. flex实验总结

    1.父元素 .box{ display:flex; flex-direction: column;//铺满垂直排列 flex-direction: column-reverse;//铺满垂直反向排列 ...

  8. 解决UC浏览器或微信浏览器上flex兼容问题

    在UC浏览器上使用display:flex;时会不起作用,要加上兼容性写法,如下 display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ disp ...

  9. flex引起height:100%失效

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. ZT 匿名内存映射

    mmap函数使用 分类: Linux/Unix C/C++ 2008-01-22 17:03 6089人阅读 评论(1) 收藏 举报 unix编程null网络 UNIX网络编程第二卷进程间通信对mma ...

  2. ZT Android的引用计数(强弱指针)技术及一些问题

    Android的引用计数(强弱指针)技术及一些问题 分类: Android 2013-06-07 18:25 844人阅读 评论(4) 收藏 举报 目录(?)[+] Android C++框架层的引用 ...

  3. Python2.7 - IMOOC - 1

    第一章 课程介绍 python 特点:优雅.明确.简单 python适合的领域:1.Web网站和各种网络服务:2.系统工具和脚本:3.作为"胶水"语言把其他语言开发的模块包装起来方 ...

  4. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  5. iOS js

    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"idNumber\" ...

  6. BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)

    Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一 ...

  7. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  8. 回顾C#经典算法冒泡排序

    冒泡算法的原理: 比较相邻的两个数字,如果第一个数字比第二个数字大,则交换它们位置 从开始第一对比较到结尾最后一对,最后一个数字就是最大数 除了最后一个数字,再次从开始第一对比较到最后一对,得出第二大 ...

  9. spring boot++jpa+ mysql +maven

    项目结构图: 一. 添加mysql 配置 1 在pom.xml中添加 maven依赖 <!--mysql--> <dependency> <groupId>mysq ...

  10. 初始化mysql数据库 /usr/bin/mysql_install_db执行时报错

    错误描述: FATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install ...