zoukankan      html  css  js  c++  java
  • Flex 4 : Chart 控件

    使用 Adobe Flex 产品线的时候,采用图表和图形来展示数据会使用户与数据的交互更加容易。相对简单的数字表格来说,可以使用表示数据的不同颜色、标题、线条来展示条形图、饼图、线图等等。

    图表控件是 Adobe Flash Builder 专业版的特性。也可以在 Falsh Builder 标准版中创建图表,但是图表控件上面会有一个水印。

    数据可视化使用简单的数据交互和数据关系展示数据。图表是数据可视化方式的一种,它可以创建二维的数据表示。 Flex 提供一些最常用的数据图表类型(如条形图、饼图等),并且提供强大的图表表示控制方式。

    一个简单图表展示了单独的数据序列,由一些相关数据点组成。例如,一个数据序列可能是月销售收入或酒店日入住率。

    使用图表控件 

    Flex 图表控件可以创建一些最常用的图表类型,并且自定义其表现形式。图表控件在 mx.charts.* 包中。

    下表列出了提供 Flex 提供的图表类型、控件类名以及用来定义每个图表的数据表示的序列类名。

    图表类型图表控件类图表序列类
    AreaAreaChartAreaSeries
    BarBarChartBarSeries
    BubbleBubbleChartBubbleSeries
    CandlestickCandlestickChartCandlestickSeries
    ColumnColunmChartColumnSeries
    HighLowOpenCloseHLOCChartHLOCseries
    LineLineChartLineSeries
    PiePieCahrtPieSeries
    PlotPlotChartPlotSeries

     

    所有的图表控件,除了 PieChart 类之外,都是 CartesianChart 类的子类。 笛卡尔图表( Cartesian Chart )专门用来在矩形和二维空间表示数据点集。 PieChart 类是 PolarChart 类的子类,它表示圆形区域的数据。

    所有的图表控件都继承自 ChartBase 类的基本图形特征。

    在 MXML 中,图表控件通常具有以下结构:

    <mx:ChartName>
        <!-- 定义一个或多个序列 -->
        <mx:SeriesName/>
        <!-- 定义水平轴与竖直轴 -->
        <mx:horizontalAxis>
            <mx:axis_type/>
        </mx:horizontalAxis>
        <mx:verticalAxis>
            <mx:axis_type/>
        </mx:verticalAxis>
        <!-- 定义样式 -->
        <mx:horizontalAxisRenderers>
            <mx:AxisRenderer/>
        </mx:horizontalAxisRenderers>
        <mx:verticalAxisRenderers>
            <mx:AxisRenderer/>
        </mx:verticalAxisRenderers/>
        <!-- 添加框格线盒其它元素 -->
        <mx:annotationElements>
            <mx:Array/>
        </mx:annotationElements>
        <mx:backgroundElements>
            <mx:Array/>
        </mx:backgroundElements/>
       </mx:ChartName>
       <!-- 定义图例(可选) -->
    <mx:Legend/>

    下表描述了图表部件的更多细节:

    部件描述
    Chart(必需)为图表定义一个或两个数据源。定义图表类型和数据提示、鼠标敏感度、gutter 样式、axis 样式
    Series(必需)为图表的展示定义一个或两个数据序列。设置数据序列的线条、填充、渲染以及每个序列图示的线条和填充。   

    也可以为每个图表定义第二个序列集合,从而在单个图表上展示多重数据序列。

    图表中的每个序列可以有其自己的数据源。

    Axes设置轴类型(数字或分类)。定义轴标签、标题和样式。
    Axes renderer(可选)设置设置样式、标签的可用性,定义轴线、标签角度和间距。
    Elements(可选)定义框格线以及一些额外元素以表现在图表上。

    对于每个图表类型, Flex 提供相应的的图表控件和图表序列。图表控件定义图表的类型、数据源、框格线、轴文本以及一些其他的属性。图表控件的数据源( dataProvider )属性确定了图表使用的数据。数据源是一个包含若干对象的集合,它可以使对象的数组( Array )或者其它继承了集合 API 的对象。数据源也可以是带有 XML 节点的 XMLList 对象,如 E4X 的查询结果。

    图表组件使用平面或基于列表的数据源,类似一维数组。数据源能够包含字符串、数字,甚至是其他的一些对象。

    使用图表序列指定数据源中的哪些数据需要在图表上面显示。数据源可以包含一些需要显示在数据图表上之外的一些数据,所以需要使用图表序列来指定数据源中需要的点。可以指定一个单独的数据序列,或者第二个序列。可以使用图表序列定义数据在图表上面的表现形式。

    所有的图表序列都继承了图表的数据源,除非它们有明确的数据源集。若要设置图标控件的 dataProvider 属性,不必在序列之上设置属性值。当然,也可以为图表控件中的每一个序列定义不同的数据源。

    例如,创建一个饼图,就用带 PieSeries 图表序列的 PieChart 控件。要创建面图,就用带 AreaSeries 图表序列的 AreaChart 控件,示例如下:

    <?xml version="1.0"?>
    <!-- charts/BasicAreaOneSeries.mxml -->
    <!-- http://www.slsay.com/archives/153 -->
    <mx:Application
           xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mx="library://ns.adobe.com/flex/halo"
           xmlns:s="library://ns.adobe.com/flex/spark">
        <fx:Script>
            <![CDATA[
               import mx.collections.ArrayCollection;
               [Bindable]
               public var expenses:ArrayCollection = new ArrayCollection([
                   {Month:"Jan", Profit:2000, Expenses:1500, Amount:450},
                   {Month:"Feb", Profit:1000, Expenses:200, Amount:600},
                   {Month:"Mar", Profit:1500, Expenses:500, Amount:300}
               ]);
           ]]>
        </fx:Script>
        <mx:Panel title="Area Chart">
            <mx:AreaChart id="myChart" dataProvider="{expenses}"
                   showDataTips="true">
                <mx:horizontalAxis>
                    <mx:CategoryAxis
                           dataProvider="{expenses}"
                           categoryField="Month"/>
                </mx:horizontalAxis>
                <mx:series>
                    <mx:AreaSeries
                           yField="Profit"
                           displayName="Profit"/>
                </mx:series>
            </mx:AreaChart>
            <mx:Legend dataProvider="{myChart}"/>
        </mx:Panel>
    </mx:Application>

    此例中,定义了一个包含于 标签的数组。 标签指定了要在图表中展示的单独数据序列。

    可以添加第二个 标签,以显示第二个数据序列,示例如下:

    <?xml version="1.0"?>
    <!-- charts/BasicArea.mxml -->
    <!-- http://www.slsay.com/archives/153 -->
    <mx:Application
           xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mx="library://ns.adobe.com/flex/halo"
           xmlns:s="library://ns.adobe.com/flex/spark"
           creationComplete="srv.send()">
        <fx:Declarations>
            <mx:HTTPService id="srv"
    url="http://aspexamples.adobe.com/chart_examples/expenses-xml.aspx"/>
        </fx:Declarations>
        <mx:Panel title="Area Chart">
            <mx:AreaChart id="myChart" showDataTips="true"
                   dataProvider="{srv.lastResult.data.result}">
                <mx:horizontalAxis>
                    <mx:CategoryAxis
                           categoryField="month"
                           displayName="Month"/>
                </mx:horizontalAxis>
                <mx:series>
                    <mx:AreaSeries
                           yField="profit"
                           displayName="Profit"/>
                    <mx:AreaSeries
                           yField="expenses"
                           displayName="Expenses"/>
                </mx:series>
            </mx:AreaChart>
            <mx:Legend dataProvider="{myChart}"/>
        </mx:Panel>
    </mx:Application>

    并不一定在图表控件上定义数据源。每个序列可以有他自己的数据源,如下所示:

    <?xml version="1.0"?>
    <!-- charts/MultipleDataProviders.mxml -->
    <!-- http://www.slsay.com/archives/153 -->
    <mx:Application
           xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mx="library://ns.adobe.com/flex/halo"
           xmlns:s="library://ns.adobe.com/flex/spark">
        <fx:Script>
            <![CDATA[
               import mx.collections.ArrayCollection;
               [Bindable]
               public var profit04:ArrayCollection = new ArrayCollection([
                   {Month:"Jan", Profit:2000},
                   {Month:"Feb", Profit:1000},
                   {Month:"Mar", Profit:1500}
               ]);
               [Bindable]
               public var profit05:ArrayCollection = new ArrayCollection([
                   {Month:"Jan", Profit:2200},
                   {Month:"Feb", Profit:1200},
                   {Month:"Mar", Profit:1700}
               ]);
               [Bindable]
               public var profit06:ArrayCollection = new ArrayCollection([
                   {Month:"Jan", Profit:2400},
                   {Month:"Feb", Profit:1400},
                   {Month:"Mar", Profit:1900}
               ]);
           ]]>
        </fx:Script>
        <mx:Panel title="Column Chart">
            <mx:ColumnChart id="myChart"
                    dataProvider="{profit04}" showDataTips="true">              
                <mx:horizontalAxis>
                    <mx:CategoryAxis categoryField="Month"/>
                </mx:horizontalAxis>
                <mx:series>
                    <mx:ColumnSeries
                           dataProvider="{profit04}"
                           yField="Profit"
                           xField="Month"
                           displayName="2004"/>
                    <mx:ColumnSeries
                           dataProvider="{profit05}"
                           yField="Profit"
                           xField="Month"
                           displayName="2005"/>
                    <mx:ColumnSeries
                           dataProvider="{profit06}"
                           yField="Profit"
                           xField="Month"
                           displayName="2006"/>
                </mx:series>
            </mx:ColumnChart>
            <mx:Legend dataProvider="{myChart}"/>
        </mx:Panel>
    </mx:Application>

    要实现动态地改变图表的大小以使用浏览器窗口,需要将 width 和 height 属性值设为百分比数值,如下所示:

    <?xml version="1.0"?>
    <!-- charts/BasicBarSize.mxml -->
    <!-- http://www.slsay.com/archives/153 -->
    <mx:Application
           xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mx="library://ns.adobe.com/flex/halo"
           xmlns:s="library://ns.adobe.com/flex/spark">
        <fx:Script>
            <![CDATA[
               import mx.collections.ArrayCollection;
               [Bindable]
               public var expenses:ArrayCollection = new ArrayCollection([
                   {Month:"Jan", Profit:2000, Expenses:1500},
                   {Month:"Feb", Profit:1000, Expenses:200},
                   {Month:"Mar", Profit:1500, Expenses:500}
                ]);
           ]]>
        </fx:Script>
        <mx:Panel title="Bar Chart" height="500" width="500">
            <mx:BarChart id="myChart"
                   dataProvider="{expenses}"
                   height="100%"
                   width="100%"
                   showDataTips="true">
                <mx:verticalAxis>
                    <mx:CategoryAxis
                       dataProvider="{expenses}"
                       categoryField="Month"/>
                </mx:verticalAxis>
                <mx:series>
                    <mx:BarSeries
                           yField="Month"
                           xField="Profit"
                           displayName="Profit"/>
                    <mx:BarSeries
                           yField="Month"
                           xField="Expenses"
                           displayName="Expenses"/>
                </mx:series>
            </mx:BarChart>
            <mx:Legend dataProvider="{myChart}"/>
        </mx:Panel>
    </mx:Application>

    如果希望在窗口大小变化时改变图表的大小,要使用百分比数值设置图表的父容器的大小。

  • 相关阅读:
    L05 Laravel 教程 电商实战
    laravel 5.5 登录验证码 captcha 引入
    thinkphp 清理runtime缓存的方法, 清理指定目录
    艾伟也谈项目管理,项目经理要如何看待技术? 狼人:
    艾伟也谈项目管理,带领团队发挥最大潜能的10个技巧 狼人:
    艾伟也谈项目管理,聊聊我们团队的绩效管理 狼人:
    艾伟也谈项目管理,创建敏捷团队 狼人:
    艾伟也谈项目管理,多任务让你走得更慢 狼人:
    艾伟也谈项目管理,项目经理的思维批判 狼人:
    艾伟也谈项目管理,创业公司技术选型参考 狼人:
  • 原文地址:https://www.cnblogs.com/fxair/p/1705057.html
Copyright © 2011-2022 走看看