加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在 Flex 应用程序中使用 AnyChart

发布时间:2020-12-15 01:15:46 所属栏目:百科 来源:网络整理
导读:? AnyChart Flash Charting Component 是一个基于 Adobe Flash 的灵活解决方案,可用于创建外观精美的交互式 flash 图表和指示板(dashboard)。它是一个跨浏览器且跨平台的制图解决方案,可用于创建指示板、报表、分析图表、统计图表、财务图表以及任何其他
?

AnyChart Flash Charting Component 是一个基于 Adobe Flash 的灵活解决方案,可用于创建外观精美的交互式 flash 图表和指示板(dashboard)。它是一个跨浏览器且跨平台的制图解决方案,可用于创建指示板、报表、分析图表、统计图表、财务图表以及任何其他可视化解决方案。
请访问以下链接查看有关 AnyChart 的更多信息:

AnyChart 概述
图表样例库
全面的用户指南


支持开发人员使用基于 Flash 的产品的技术众多,但每种技术都有其各自的问题。AnyChart 团队努力成为一个典范,努力让 AnyChart 的实现变得更加容易、更易于理解。本文解释了如何将 AnyChart Flash Chart、地图、计量器和指示板与 Adobe Flex 配合使用。
简介
如何向项目和工作区添加组件
第一个图表
处理数据
动态图表刷新
处理图表事件
工作区的多个图表
在指示板中使用向下钻取
使用地图
使用计量器
后记

?

简介
Flex 应用程序的应用范围非常广,但该平台最大的效力就是引入了 Business Analytics。通过使用 Flex,Business Analytics 能够为 BI 创建便捷的交互式指示板。指示板的一个关键部分是图表,图表的功能和易读性影响着整个指示板的适用性。AnyChart 严格遵守这些标准,该组件在功能和外观上都大大超越了默认的 Flex Charting Component。早期的 AnyChart 主要用于 HTML 页面,它与 Flex 组件的整合是一个很大的问题,但现在我们创建了一个满足条件的 Flex 组件,它可以很好地连接 Flex 应用程序中的 XML 工具。
您只需要一个 .SWC 组件库。该组件以 XML 格式获取图表的数据和设置。这样一来,您就可以使用所有的 AnyChart 功能。可以使用任何数据源创建自己的 XML。
使用 AnyChart XML 格式,可以从组件库中挑选一个喜欢的示例,它已经调试好,只需更改一下数据,就可以用于您的应用程序。在可视化效果和选项方面,AnyChart 非常灵活,它可以根据您的喜好微调每个元素,详情请参见用户指南。完整的 XML Nodes 和属性列表请参见XML 参考资料。
?许可:本教程使用 AnyChart Flex 组件试用版——如果想在 Flex 项目中使用AnyChartFlexComponent.swc,需要购买相应的 AnyChart 许可证。

?
如何向项目和工作区添加组件
首先,必须下载 SWC 组件(一个用于计量器,一个用于图表和地图)。请单击该链接下载:? AnyChartFlexComponent.zip
注意:下面您将看到一些示例,您可以在线查看示例、查看源代码和下载每个示例。
然后,从保存下载组件的位置将文件拖放到项目的 "libs" 文件夹:

?


"AnyChartFlex" 组件出现在 "Components" 选项卡的 "Custom" 部分之后,将其拖动到工作区(1),然后按 "Refresh" 按钮(2):


完成这些操作之后,新添加的图表即可投入使用。AnyChart Flex Component 不支持 Design Time 模式,在工作区中,它看起来像一个背景为灰色的 AnyChart 徽标,屏幕截图如下:

第一个图表
组件被添加到工作区后即可使用。
如上文所述,AnyChart 使用特殊的 XML 格式接收所有设置和数据。使用 MXML 不能直接调整图表的外观和点数据——所有设置和数据都使用 AnyChartFlex.anychartXML 属性设置。
创建图表的过程分为以下三个步骤:
1) 微调常规设置,比如选择图表类型、调整标签、坐标轴标签等。以下是一段设置这些选项的 XML 代码:

view plain copy to clipboard print ?
  1. <chart?plot_type="CategorizedVertical">??
  2. ????<chart_settings>??
  3. ??????<title>??
  4. ??????????<text>ACME?Corp.?Sales</text>??
  5. ??????</title>??
  6. ??????<axes>??
  7. ??????????<x_axis>??
  8. ??????????????<title>??
  9. ??????????????????<text>Year</text>??
  10. ??????????????</title>??
  11. ??????????</x_axis>??
  12. ??????????<y_axis>??
  13. ??????????????<title>??
  14. ??????????????????<text>Sales?(USD)</text>??
  15. ??????????????</title>??
  16. ??????????</y_axis>??
  17. ??????</axes>??
  18. ??</chart_settings>??
  19. </chart>??

2) 准备数据并使用 XML 格式转换:
在本例中,我们将展示如何创建 Single-Series Column 图表。要创建图表,就需要数据,在本例中,我们将使用 ACME Corp 5 年(2004-2008)的销售数据。销售数据表如下:

年度

销售额

2004

$63716

2005

$72163

2006

$94866

2007

$56866

2008

$90.000

在本例中,我们仅转换 XML 格式的销售表格用于该图表类型。该表格的 AnyChart XML 如下:

view plain copy to clipboard print ?
  1. <data>??
  2. ????<series?name="Product?Sales"?type="Bar">??
  3. ????????<point?name="2004"?y="63716"?/>??
  4. ????????<point?name="2005"?y="72163"?/>??
  5. ????????<point?name="2006"?y="94866"?/>??
  6. ????????<point?name="2007"?y="56866"?/>??
  7. ????????<point?name="2008"?y="19000"?/>??
  8. ????</series>??
  9. </data>??

3) 将配置好的 XML 设置为组件:
现在,图表和数据的常规设置俱备,完整的 XML 如下:

view plain copy to clipboard print ?
  1. <anychart>??
  2. ??<charts>??
  3. ????????<chart?plot_type="CategorizedVertical">??
  4. ??????????<data>??
  5. ????????????<series?name="Product?Sales"?type="Bar">??
  6. ??????????????<point?name="2004"?y="63716"?/>??
  7. ??????????????<point?name="2005"?y="72163"?/>??
  8. ??????????????<point?name="2006"?y="94866"?/>??
  9. ??????????????<point?name="2007"?y="56866"?/>??
  10. ??????????????<point?name="2008"?y="19000"?/>??
  11. ????????????</series>??
  12. ??????????</data>??
  13. ??????????<chart_settings>??
  14. ??????????????<title>??
  15. ??????????????????<text>ACME?Corp.?Sales</text>??
  16. ??????????????</title>??
  17. ??????????????<axes>??
  18. ??????????????????<x_axis>??
  19. ??????????????????????<title>??
  20. ??????????????????????????<text>Year</text>??
  21. ??????????????????????</title>??
  22. ??????????????????</x_axis>??
  23. ??????????????????<y_axis>??
  24. ??????????????????????<title>??
  25. ??????????????????????????<text>Sales?(USD)</text>??
  26. ??????????????????????</title>??
  27. ??????????????????</y_axis>??
  28. ??????????????</axes>??
  29. ??????????</chart_settings>??
  30. ????????</chart>??
  31. ??</charts>??
  32. </anychart>;??

现在我们需要做的是将该 XML 设置为表格(工作区的一个实际组件),方法是将 XML 对象设置为AnyChartFlex.anychartXML 属性。完整的实例代码如下:

view plain copy to clipboard print ?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"???
  3. ????????????????layout="absolute"?xmlns:ns1="com.anychart.*"???
  4. ????????????????viewSourceURL="srcview/index.html"??
  5. ????????????????creationComplete="onCreationComplete();">??
  6. ??????????????????
  7. ????<ns1:AnyChartFlex?x="10"?y="10"?width="570"?height="450"?id="sampleChart"/>??
  8. ??????
  9. ????<mx:Script>??
  10. ????????<!--[CDATA[??
  11. ????????????private?function?onCreationComplete():void??
  12. ????????????{??
  13. ????????????????var?xmlData:XML=<anychart>??
  14. ??????????????????<charts>??
  15. ????????????????????<chart?plot_type="CategorizedVertical">??
  16. ??????????????????????<data>??
  17. ????????????????????????<series?name="Product?Sales"?type="Bar">??
  18. ??????????????????????????<point?name="2004"?y="63716"?/>??
  19. ??????????????????????????<point?name="2005"?y="72163"?/>??
  20. ??????????????????????????<point?name="2006"?y="94866"?/>??
  21. ??????????????????????????<point?name="2007"?y="56866"?/>??
  22. ??????????????????????????<point?name="2008"?y="19000"?/>??
  23. ????????????????????????</series>??
  24. ??????????????????????</data>??
  25. ??????????????????????<chart_settings>??
  26. ??????????????????????????<title>??
  27. ??????????????????????????????<text>ACME?Corp.?Sales</text>??
  28. ??????????????????????????</title>??
  29. ??????????????????????????<axes>??
  30. ??????????????????????????????<x_axis>??
  31. ??????????????????????????????????<title>??
  32. ??????????????????????????????????????<text>Year</text>??
  33. ??????????????????????????????????</title>??
  34. ??????????????????????????????</x_axis>??
  35. ??????????????????????????????<y_axis>??
  36. ??????????????????????????????????<title>??
  37. ??????????????????????????????????????<text>Sales?(USD)</text>??
  38. ??????????????????????????????????</title>??
  39. ??????????????????????????????</y_axis>??
  40. ??????????????????????????</axes>??
  41. ??????????????????????</chart_settings>??
  42. ????????????????????</chart>??
  43. ??????????????????</charts>??
  44. ????????????????</anychart>;??
  45. ??????????????????
  46. ????????????????sampleChart.anychartXML=xmlData;??
  47. ????????????}??
  48. ????????]]-->??
  49. ????</mx:Script>??
  50. </mx:Application>??

最后的结果如下图所示:

查看示例

查看源代码


处理数据
准备图表的数据是一个非常重要的过程,因此我们必须格外重视。要将数据设置为图表,需要将其从数据源转换为特殊的 XML 格式。对于 Flex 开发人员来说,数据源通常为 ArrayCollection、Array、XMLList 和 XMLListCollection。语法取决于图表类型。
AnyChart 中各种类型图表的所有数据都按顺序逐个传递。每个序列都是一个所谓的“点”集。数据点表示图表上的一个数据元素。例如,它可能是地图上某一行或某个区域的一个值。点携带了在图表上构建序列所需的所有数据和附加信息。AnyChart 架构的图表类型取决于 Plot 类型和序列类型。这两个内容定义了必须传递给组件的点 XML 的格式。
以下是一个使用该 Plot 的表格,根据 Plot 类型和序列类型分类。以下是序列中相应 XML 点的示例,创建图表时需要这些内容:

Plot:CategorizedVertical,CategorizedHorizontal,CategorizedBySeriesVertical,CategorizedBySeriesHorizontal

?

序列类型

点?XML?格式示例

Bar
Line
Spline
Marker
Area
SplineArea
StepLineForward
StepLineBackward
StepLineForwardArea
StepLineBackwardArea

<series?type="Bar|Line|Spline|...">
<point?name="P1"?y="100"/>
<point?name="P2"?y="190"/>
<point?name="P3"?y="150"/>
</series>

Bubble

<series?type="Bubble">
<point?name="P1"?y="100"?size="10"/>
<point?name="P2"?y="190"?size="13"/>
<point?name="P3"?y="150"?size="25"/>
</series>

RangeBar
RangeArea
RangeSplineArea

<series?type="RangeBar|RangeArea|RangeSplineArea">
<point?name="P1"start="100"?end="190"/>
<point?name="P2"start="110"?end?="210"/>
<point?name="P3"start="115"?end?="160"/>
</series>

Candlestick
OHLC

<series?type="Candlestick|OHLC">
<point?name="P1"?open="10"?high="12"?low="9"?close="11"?/>
<point?name="P2"?open="12"?high="14"?low="10"?close="13"?/>
<point?name="P3"?open="11"?high="18"?low="3"?close="15"?/>
</series>

?

Plot:Scatter

?

序列类型

点?XML?格式示例

Line
Spline
Marker
Area
SplineArea
StepLineForward
StepLineBackward
StepLineForwardArea
StepLineBackwardArea

<series?type="Line|Spline|Bubble|...">
<point?x="120"?y="100"/>
<point?x="180"?y="190"/>
<point?x="145"?y="150"/>
</series>

Bubble

<series?type="Bubble">
<point?x="145"?y="100"?size="10"/>
<point?x="180"?y="190"?size="13"/>
<point?x="220"?y="150"?size="25"/>
</series>

RangeArea
RangeSplineArea

<series?type="RangeArea|RangeSplineArea">
<point?x="34"?start="100"?end="190"/>
<point?x="50"?start="110"?end?="210"/>
<point?x="123"?start="115"?end?="160"/>
</series>

Candlestick
OHLC

<series?type="Candlestick|OHLC">
<point?x="150"?open="10"?high="12"?low="9"?close="11"?/>
<point?x="230"?open="12"?high="14"?low="10"?close="13"?/>
<point?x="340"?open="11"?high="18"?low="3"?close="15"?/>
</series>

?

Plot:Pie/Doughnut

?

序列类型

点?XML?格式示例

N/A

<point?name="P1"?y="100"/>

?

Plot:Map

?

序列类型

点?XML?格式示例

MapRegions

<series>
<point?name="Finland"?y="5.92"/>
<point?name="Germany"?y="6.85"/>
<point?name="Greece"?y="5.75"/>
</series>

Marker

<series?type="Marker">
<point?x="-94.19"?y="58.571"?name="Marker?1"/>
<point?x="-121.554"?y="28.722"?name="Marker?2"/>
</series>

Bubble

<series?type="Bubble">
<point?x="-77.61"?y="43.16"?size="231"/>
<point?x="-122.2"?y="37.77"?size="372"/>
<point?x="-97.51"?y="35.46"?size="444"/>
</series>

Line

<series?type="Line">
<point?x="-94.19"?y="58.571"/>
<point?x="-121.554"?y="28.722"/>
</series>

Connector

<series?type="Connector">
<point?x="-92.19"?y="38.571"/>
<point?x="-92.354"?y="34.722"/>
</series>

?

正如从表格中看到的,可以在同一个 Plot 类型中结合使用多个序列类型。例如,可以在 CategorizedVertical Plot 类型中创建图表,并添加几种不同的序列,例如:Bar、Line、Spline、Area 和 OHLC。
形成 XML
对于 Flex 开发人员来说,处理图表时最常用的存储数据的机制是 ArrayCollection。让我们看一个例子,使用 createSeriesFromAC 函数将随机 ArrayCollection 转换为 AnyChart XML 格式。该函数非常简单。只需指出序列的类别字段和值字段,并输入序列名称,就可以在标签或标签/工具提示格式化过程中使用序列名称:

查看示例

查看源代码

在给定的示例中,我们使用 CategorizedVertical Plot 类型和 Bar 序列类型。要创建另一种图表,必须引用参考表格,对 createSeriesFromAC 函数稍加修改,才能获得所需的结果。让我们看一个在 Scatter Plot 上构建 Bubble 图表的应用程序。该图表的序列点语法如下:<point x="10" y="10" size="45"/>。要创建必需的 XML,我们需要编写另一个从 ArrayCollection 类示例中收集数据的程序。

查看示例

查看源文件

使用定制属性
定制属性对于开发人员来说是一个非常有用的工具。使用它们可以向数据点添加附加信息,供标签和工具提示文本格式化时使用,也可以用于点标识,以便未来在点的事件处理程序中使用。
让我们看看典型的定制属性用法示例。我们有一个数据表格,反映了公司的月度 KPI,包括每月的利润、开销和员工数:

月份

利润

开销

员工数

一月

2000000

1500000

100

二月

1000000

200000

80

三月

1500000

500000

110

我们必须使用一个序列构建 Horizontal Bar Chart,使用 Month 列表示类别,使用 Profit 列表示值。此外,在每个点的工具提示中,不仅需要展示利润值,而且需要展示实际月份的开销量和员工数。为了让组件能够在工具提示中显示所需的数据,我们需要为每个点定义一列定制属性。点定制属性的语法如下:

view plain copy to clipboard print ?
  1. <point?name="January"?y="2000000">??
  2. ???????<attributes>??
  3. ???????????<attribute?name="attributeName">attributeValue</attribute>??
  4. ???????</attributes>??
  5. ???</point>??
  6. ??
  7. AttributeName?–?是一个属性标识符,在工具提示/标签格式化字符串中使用。AttributeValue?–?是该属性的实际值。??
  8. 使用定义的定制属性转换的?XML?表格:??
  9. <series?name="Profit">??
  10. ???<point?name="January"?y="2000000">??
  11. ???????<attributes>??
  12. ???????????<attribute?name="Expenses">1500000</attribute>??
  13. ???????????<attribute?name="ENo">100</attribute>??
  14. ???????</attributes>??
  15. ???</point>??
  16. ???<point?name="February"?y="1000000">??
  17. ???????<attributes>??
  18. ???????????<attribute?name="Expenses">200000</attribute>??
  19. ???????????<attribute?name="ENo">80</attribute>??
  20. ???????</attributes>??
  21. ???</point>??
  22. ???<point?name="March"?y="1500000">??
  23. ???????<attributes>??
  24. ???????????<attribute?name="Expenses">500000</attribute>??
  25. ???????????<attribute?name="ENo">110</attribute>??
  26. ???????</attributes>??
  27. ???</point>??
  28. </series>??

?

?

从清单中可以看到,处理实际月份开销和员工数的所有信息都位于定制属性中。将数据转换为 XML 时,我们使用 ArrayCollection 作为数据源,使用一个简单的函数进行数据转化和映射。示例执行结果如下图所示:

查看示例

查看源代码

动态图表刷新
要动态更新图表,需要进行的操作与在第一个图表中的相同。只需使用数据更改一个 XML,并将其赋予 AnyChartFlex.anychartXML 属性。
下文将可以看到完整的清单和一个非常简单的应用程序,该应用程序使用 Doughnut Chart 的动态数据刷新:

view plain copy to clipboard print ?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"?xmlns:ns1="com.anychart.*"???
  3. ????????????????creationComplete="updateChart();"?viewSourceURL="srcview/index.html">??
  4. ??
  5. <ns1:AnyChartFlex?x="10"?y="10"?id="sampleChart"?height="363"?width="437"/>??
  6. <mx:Button?x="455"?y="31"?label="Random?Data"?width="134"?height="35"?click="updateChart();"/>??
  7. ??
  8. <mx:Script>??
  9. ????<!--[CDATA[??
  10. ????????private?function?updateChart():void??
  11. ????????{??
  12. ????????????var?xmlData:XML=??
  13. ????????????<anychart>??
  14. ????????????????<charts>??
  15. ????????????????????<chart?plot_type="Doughnut">??
  16. ????????????????????????<data>??
  17. ????????????????????????????<series>??
  18. ????????????????????????????????<point?name="P1"?y={10+Math.random()*20}/>??
  19. ????????????????????????????????<point?name="P2"?y={10+Math.random()*20}/>??
  20. ????????????????????????????????<point?name="P3"?y={10+Math.random()*20}/>??
  21. ????????????????????????????????<point?name="P4"?y={10+Math.random()*20}/>??
  22. ????????????????????????????</series>??
  23. ????????????????????????</data>??
  24. ????????????????????</chart>??
  25. ????????????????</charts>??
  26. ????????????</anychart>;??
  27. ??????????????
  28. ????????????sampleChart.anychartXML=xmlData;??
  29. ????????}??
  30. ????]]-->??
  31. </mx:Script>??
  32. </mx:Application>??

该代码的执行示例:

查看示例

查看源代码

关于动态图表更新还有一个示例。该示例演示了使用随机值更改序列类型和更新图表数据的可能性:
?


查看示例

查看源代码

?

处理图表事件
在 Anychart Flex Component 中,无论是 Line Chart 还是 Map,事件处理对于所有的图表类型都是一样的。当用户单击或悬停到一点时,您可以获取所有相关的信息,比如类别名称、Y 值、序列名称以及所有定制属性的完整列表。您可以处理以下事件:

pointClick – 用户单击点时发生。
pointMouSEOver – 用户将鼠标悬停在点上方时发生。
pointMouSEOut – 用户将鼠标指针从点移开时发生。
要处理事件,必须定义事件处理程序函数。该处理程序必须接收 AnyChartPointEvent 类实例(包含取自点的数据)作为参数。以下是一个事件处理程序定义的示例:

view plain copy to clipboard print ?
  1. <?xml?version="1.0"?encoding="utf-8"?>??
  2. <mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"?xmlns:ns1="com.anychart.*">??
  3. ??????<ns1:AnyChartFlex?x="10"?y="10"?width="472"?height="401"?id="sampleChart"???
  4. ??????????????????????pointClick="onPointClick(event);"???
  5. ??????????????????????pointMouSEOver="onPointMouSEOver(event);"??
  6. ??????????????????????pointMouSEOut="onPointMouSEOut(event);"/>??
  7. ????<mx:Script>??
  8. ????????<![CDATA[??
  9. ????????????import?com.anychart.events.AnyChartPointEvent;??
  10. ????????????private?function?onPointClick(event:AnyChartPointEvent):void?{??
  11. ????????????????trace(event);??????????????????
  12. ????????????}??
  13. ??????????????
  14. ????????????private?function?onPointMouSEOver(event:AnyChartPointEvent):void?{??
  15. ????????????????trace(event);??
  16. ????????????}??
  17. ??????????????
  18. ????????????private?function?onPointMouSEOut(event:AnyChartPointEvent):void?{??
  19. ????????????????trace(event);??
  20. ????????????}??
  21. ?????????]>??
  22. ????</mx:Script>??
  23. </mx:Application>??

AnyChartPointEvent 类的实例由处理程序函数接收,包含与发送事件的点相关的所有信息。下面是一个所有属性的表格,包括处理程序和对应 XML 节点及属性:

属性名称

XML?节点或属性

说明

pointName

<point?name="Jan"/>

类型:String;返回?Categorized?plot?类型的参数

seriesName

<series?name="Product?A"/>

类型:String;返回点序列的名称

y

<point?y="215"/>

类型:Number;返回值

x

<point?x="56"/>

类型:Number;返回?Scatter?plot?的参数

size

<point?size="0.67"/>

类型:Number;返回?Bubble?序列类型的圆圈大小

high

<point?high="25.56"/>

类型:Number;返回?OHLC?和?CandleStick?序列类型的?high?值

low

<point?low="31.22"/>

类型:Number;返回?OHLC?和?CandleStick序列类型的?low?值

open

<point?open="44.77"/>

类型:Number;返回?OHLC?和?CandleStick序列类型的?open?值

close

<point?close="12.34"/>

类型:Number;返回?OHLC?和?CandleStick序列类型的?close?值

start

<point?start="12.5"/>

类型:Number;返回?Range?序列类型:RangeBar、RangeArea?和?RangeSplineArea?的?start?值

end

<point?end="45.1"/>

类型:Number;返回?Range?序列类型:RangeBar、RangeArea?和?RangeSplineArea?的?end?值

pointCustomAttributes

<point>
<attributes>
<attribute?name="id">45187</attribute>
</attributes>
</point>

类型:Object;返回动态类,字段保存点?XML?中定义的定制属性

seriesCustomAttributes

<series>
<attributes>
<attribute?name="fullName">John?Scott</attribute>
</attributes>
</series>

类型:Object;返回动态类,字段保存序列?XML?中定义的定制属性

事件中的数据取决于图表以及事件类型中使用的序列类型和 Plot 类型。pointClick 和 pointMouSEOver 事件总是返回一些数据,pointMouSEOut 事件总是返回空白数据。在未设置属性的情况下,对于 Number 类型的属性返回 NaN,String 和 Object 则返回 null。下一个 Bar Chart 示例中将展示如何处理事件:


查看示例

查看源代码

?

?


获取事件处理程序中的定制属性

在处理数据的过程中,可以学习如何向数据点添加定制属性。定制属性是一个可以赋予图表序列中的特定点或所有点的附加信息。定制属性可以用于标签和工具提示,但是其主要目的是获取有关单击点或该点其他事件的附加信息。该方法对于为每个点设置唯一的标识符非常有用。该信息可用于接收附加数据,以便后来的图表向下钻取(drill-down)。除此之外,它也可以用于在点中存储一些额外数据,以便在外部元素或控件中显示。
在 XML 中设置定制属性的语法如下所示:

view plain copy to clipboard print ?
  1. <point?name="Jan"?y="72781">??
  2. ???<attributes>??
  3. ???????<attribute?name="productID">98761-73</attribute>??
  4. ???????<attribute?name="productFullName">Cherry</productFullName>??
  5. ???????<attribute?name="profitLastYear">98712</productFullName>??
  6. ???</attributes>??
  7. </point>??

在上面的代码片段中,只显示了一个序列点。附加了三个定制属性:productID、productFullName和profitLastYear。该数据不在图表中,但是从该点获取事件时,可以获取完整的属性及其值列表。
要在 AnyChartPointEvent 事件类中获取定制属性,要使用 Object 类型的 pointCustomAttributes 属性。属性由点 XML 的名称设置接收。例如,要获取 productID 字段的值,必须使用以下表达式- event.pointCustomAttributes.productID。
以下是更加详细的代码示例,可获取所有定制属性,并将值输出到调试控制台:

view plain copy to clipboard print ?
  1. private?function?onPointClick(event:AnyChartPointEvent):void??
  2. {??
  3. ????var?productID:String=event.pointCustomAttributes.productID;??
  4. ????var?productFullName:String=event.pointCustomAttributes.productFullName;??
  5. ????var?profitLastYear:String=event.pointCustomAttributes.profitLastYear;??
  6. ????trace(productID);??
  7. ??trace(productFullName);??
  8. ??trace(profitLastYear);??

从代码中可以看到,应该使用 XML 中声明的名称。如果在某些点没有设置定制属性,那么应该进行null-check。例如:if(event.pointCustomAttributes.productID!=null) productID=event.pointCustomAttributes.productID;
下面我们来看一个包含事件处理和获取点定制属性的示例。本例是反映几个欧洲国家之间总 GDP 比较情况的图表。每个点除了 GDP 值之外,还有 4 个附加字段:Capital、Area、Density 和 Population。把鼠标悬停在点上时,有关国家的附加信息出现在外部面板中。

查看示例

查看源代码

工作区的多个图表
AnyChart Flex Component 的行为与其他组件或控件元素相同。要在一个窗体中创建多个图表,必须将足够的空间拖放到工作区,参见如何向工作区添加图表小节。
下例展示了在工作区使用几个图表的情况:

查看示例

查看源代码


在指示板中使用向下钻取
向下钻取(Drilldown)机制在指示板中使用广泛。通过该机制,用户能够从数据源获取更多详细信息。这可能涵盖了任何显示图表的控件元素,包括图表本身。对两个图表使用向下钻取的典型示例如下:有一个所谓的一级图表,包含每个数据点的一些摘要信息。旁边是另一个图表,所谓的二级图表。该图表显示第一个图表中选中的每个点的更详细信息。
让我们以 ACME 公司的数据为例。我们有产品 A、产品 B 和 产品 C 在 2007 年的销售数据。首先,我们关注季度销售额。我们将该数据放入第一个图表。结果我们得到一个清晰明了的 4 列图表。这很好,但是如果 ACME 公司的 CEO 查看该报表时看不到价值怎么办?当然,他希望发现第一季度销售额这么低的原因,哪些产品不够火爆,以至于影响了最后的结果。或者,他看到第三季度的销售额快速增长,于是很想了解哪个产品带来了这种结果。为了满足 CEO 的好奇心,我们在工作区添加了另一个图表,按月显示每个产品的详细信息。单击每个季度列时,他将获得详细信息。下文我们展示了这种指示板的示例。一级图表中默认选中第一季度,可以在二级图表中查看第一季度的详细信息。本例展示了如何从一级图表中获取 pointClick 事件,从中选择季度索引,然后刷新二级图表查看更加详细的季度数据:

查看示例

查看源代码

另一个示例展示了如何使用多个向下钻取。我们有一个一级图表,ACME 公司 2007 年的月度销售额。在两个二级饼图中,我们展示了产品 A、产品 B 和产品 C 在东部和西部的销售额。当选中第一个图表中的列时,二级图表将使用该月的实际数据进行刷新。本例与上例使用相同的方法,不同之处在于我们刷新两个二级图表。

查看示例

查看源代码

指示板的布局通常不允许使用两个以上的图表进行向下钻取,因为空间有限。在这种情况下,可以使用所谓的自我向下钻取(Self-Drilldown),在同一个位置获取更加详细的图形。下一个示例将演示这种情况。当我们单击一级图表中的点时,相当于选择了相应的季度,就会在同一个图表中得到所有月份和产品的详细信息。如果希望再次查看季度信息,只需单击 "Back" 按钮。

查看示例

查看源代码

?

?

使用地图
无论是设计指示板还是报表,主要目的都是以最方便、清晰的方式展示数据。使用 AnyChart 能够以非常清晰的方式展示复杂的地理数据。在处理地理信息时,最自然最全面的数据显示方法就是地图。
第一张地图
AnyChart 中处理地图的架构如下文所述。与其他组件不同,AnyChart 不在可执行的 .SWF 文件中存储数据用于绘制地图。它从外部以特殊的 .AMAP 格式下载数据,该格式存储一组多边形用于地图绘制,还存储用于处理地理区域的数据。这为开发人员增加了灵活性,使得他们可以在项目中使用任意数量的地图,而不用担心 .SWF 文件和应用程序变大。
地图与其他图表相同,接收 XML 格式的设置和数据,唯一的不同之处在于,地图必须有图源(即到 .amap 文件的路径),包含将使用的地图。让我们看看最简单的地图用法。在此例中,我们不对地区使用绑定数据,而只是显示该地图。
为实现这一点,我们需要:
1) 从随 AnyChart 包发行的地图集中选择一个地图。例如,我们选择澳大利亚地图 (australia.amap)。
2) 将地图的 .amap 文件放入将包含应用程序 .swf 文件的目录中。在开发环境中,这应该是 bin-debug 或 bin-release 文件夹。在我们的例子中,我们将地图放入 maps 子文件夹中,因此完整的路径为:bin-release/maps/australia.amap。
3) 定义 XML 设置中的地图源文件。这非常简单,首选需要设置包含所有地图的路径和文件夹,然后设置地图源,即 .amap 文件名。接下来是定义所有这些设置的 XML 清单:

view plain copy to clipboard print ?
  1. <anychart>????<settings>??
  2. ????????<maps?path_type="absolute"?path="maps/"?/>??
  3. ???</settings>??
  4. ???<charts>??
  5. ???????<chart?plot_type="Map">??
  6. ???????????<data_plot_settings>??
  7. ???????????????<map_series?source="australia.amap"/>??
  8. ???????????</data_plot_settings>??
  9. ???????????<chart_settings>??
  10. ???????????????<title>??
  11. ???????????????????<text>Australia?Map</text>??
  12. ???????????????</title>??
  13. ???????????</chart_settings>????????</chart>??
  14. ???</charts>??
  15. </anychart>??

将该 XML 设置为组件后,我们将得到以下结果:

?

查看示例

查看源代码

下载

注意:默认情况下,Flex Builder 打包的初始代码中不包含示例(使用地图文件.amap)中的 bin-debug 和 bin-release 文件夹。如果想下载带有地图用法的初始代码示例,请使用 "Download" 链接而不是 "View Source -> Download source"。所有带有地图用法的示例以及文件都包含在 "Download" 链接中。
绑定地图与地区数据
所有 AnyChart 地图都有一个地区布局。可以将任何值或定制属性集绑定到地图的某个地区。之后可以根据特定的规则或情况为地区定义各种颜色。
要将数据绑定到某个地区,我们必须在序列中定义一个数据点,包含预定义的标识符或地区名。例如,我们将美国地图划分为州,然后将值 2150 绑定到加利福尼亚州。此类操作的 XML 语法如下:

view plain copy to clipboard print ?
  1. <data>????<series>????????<point?name="CA"?y="2150"/>??
  2. ????</series>??
  3. </data>??

除了一个值外,可以绑定任何数量的定制属性,然后在标签、工具提示或事件处理程序中使用。
绑定地图与数据通常用于监控销售额。让我们看一个详细的示例。将美国地图划分为州,值本身绑定到州,不向用户提供任何内容。当然,可以将与销售额绑定的值显示为州地图上的标签,但是这与用户在完整州列表表格上看到的内容相同。在这种情况下,可以使用颜色快速确定州的销售额状态。
例如,让所有销售水平低于 10000 美元的州都标记为红色,销售额位于 10000 到 40000 美元之间的州标记为黄色,销售水平高于 40000 美元的州标记为绿色。在这种情况下,用户在查看地图时将获得一个较好的商品参考点,。用户第一眼就可以看到得克萨斯州的销售水平不令人满意,而华盛顿的水平则超出了所有预期。
执行应用程序示例将构建如下地图:

?


查看示例

查看源代码

下载

?

?

在地图上做标记
在 AnyChart 中,可以在地图上做标记。标记是一个具有特定形状和大小的元素,可以用于图表和地图。在地图中,标记用来显示城市或其他地理位置。AnyChart 使用地理坐标在地图上定义元素位置。要在地图上添加标记,需要指出经度和纬度。
标记的 XML 语法如下:

view plain copy to clipboard print ?
  1. ????<point?name="Inuvik"?x="-133.7059935517"?y="68.36599718311"/>??
  2. ???<point?name="Juneau"?x="-134.4040065517"?y="58.30300118311"/>????<point?name="Prince?Rupert"?x="-130.3099975517"?y="54.32099918311"/>??
  3. </series>??

Marker 类型序列在上面的清单中声明。它包含 4 个点。在点定义中,最重要的部分是 x 和 y 属性,其中 x 表示经度,y 表示纬度。本例中的 Name 属性设置点名称,如城市名。可将该值用作标签和工具提示的格式化文本,可以使用 {%Name} 令牌,还可以在事件处理期间用于点标识。
标记用法示例。使用标记展示加拿大的城市位置:

?

?


查看示例

查看源代码

下载

在地图中使用气泡(Bubble)
除了标记之外,还可以使用气泡。它们通常相对于其他点显示一些值。在 AnyChart 中,可以使用与标记相同的方式向地图添加气泡。要向地图添加气泡,必须调整点的经度和纬度。唯一的不同之处在于,必须设置气泡大小。
气泡的 XML 语法:

view plain copy to clipboard print ?
  1. <series?type="Bubble">????<point?name="Text"?x="-92"?y="632"?size="63.5"/>??
  2. ????<point?name="Inuvik"?x="-133.7059935517"?y="68.36599718317"?size="25.9"/>??
  3. ???<point?name="Juneau"?x="-134.4040065517"?y="58.3030011837"?size="42.2"/>????<point?name="Prince?Rupert"?x="-130.3099975517"?y="54.32099918311"17"?size="39.4/>??
  4. </series>??

可以从列表中看到,气泡和标记的不同之处是序列类型和附加 size 属性。气泡最常见的用法是城市和地区统计数据的可视化。下文的示例展示了加拿大各城市的站点特殊用户访问数。气泡大小用作这些特殊用户数的百分比值:

?

查看示例

查看源代码

下载

?

在地图上使用 Connector
我们常常需要在地图上显示一些路径。特殊序列类型 Connector 包含了许多路径点。与地图上的 Line 序列不同,connector 是作为单个实体的行。根据该原则,它发送事件并显示工具提示。
地图上 Connector 的 XML 语法如下:

view plain copy to clipboard print ?
  1. <series?type="Connector"?name="Moosonee?-?Toronto"?color="DarkRed">??
  2. <point?x="-80.7300035517"?y="51.33000218311"/><point?x="-79.4126355517"?y="43.72076818311"/>??
  3. </series>??

与地图上的其他元素类型相同,Connector 点的坐标也使用地理坐标定义。在每个connector 中,必须至少定义两个点,否则 connector 将不会显示。
在下例中,connector 用于显示从 Moosonee 到其他城市的可用航班。除了 connector 之外,本例还使用标记展示城市。

?


查看示例

查看源代码

下载

处理地图事件
处理地图事件与图表相同。可以获取与地图上的点有关的完整信息。这可以是地图地区、标记、气泡或 connector。处理图表事件一节详细说明了如何处理事件、如何从点获取数据并处理定制属性。
我们使用可视化方法展示了一个处理地图事件的示例。除了事件处理之外,本例还演示了如何使用 XMLListCollection 类实例作为数据源:

?

?

?

查看示例

查看源代码

下载

在地图中使用 Drilldown
在 AnyChart 中,可以通过向下钻取创建地图。所有地图都取自外部资源,也可以创建一个应用程序,向下钻取任何深度都没有问题。地图向下钻取与在图表中类似。在指示板中使用 Drilldown一节中描述的技术同样适用于地图。唯一的不同之处在于,若要下钻到某些地区,必须更改地图源。
为了演示这一点,我们创建了一个相对复杂的示例,从美国地图自我向下钻取到具体的州。本例的示例数据是从外部源获取的——这是一个具有状态节点集合的 XML 文件,每个文件都包含一个节点集合,保存本州城市的统计信息。带有名为 usaData.xml 的数据文件位于项目的 bin-debug 和 bin-release 文件夹中。对于该项目,我们使用划分为州的美国地图,以及划分为城市的所有州地图。所有这些 .amap 文件都取自标准的 AnyChart 包。项目中使用的地图文件位于 bin-debug/maps 和 bin-release/maps 文件夹中。
该示例的工作模式非常简单。在 pointClick 事件中,我们获取州标识符并使用它作为地图文件的名称。例如,如果用户单击 California,我们获取州标识符 – CA。之后,我们形成该州的新 XML 和数据,将新的地图源设置为 "counties/CA.amap" 并刷新组件。
可以从示例截屏下方的“下载”链接下载项目,下载内容将包含所有地图,包括全国和各州的地图:

?


查看示例

查看源代码

下载

使用计量器
计量器图表(Gauge Chart)的理念与其他图表相同,但是 XML 设置和函数稍有区别。
如何更新值和颜色
本例展示如何更改计量器中指针的值及其颜色。该方法适用于所有测量仪和指针类型。

?

?


查看示例

查看源代码
如何处理事件
本例展示在指针可编辑且用户可以拖动它更改值时,应该如何处理值更改事件。该方法适用于所有测量仪和指针类型。

?

查看示例

查看源代码

圆形计量器
圆形计量器(Circular Gauge)的刻度范围从 0 度到 360 度,还有一个用来指示刻度值的指针(包括针和旋钮)。计量器刻度通常都是彩色的,以轻松区分值。
更多有关圆形计量器 XML 的内容,请参见用户指南:

Circular Gauges XML Documentation。

?

查看示例

查看源代码

半圆形计量器
半圆形计量器(Semi Circular Gauge)是刻度范围为 180 度的圆形计量器(实际上可以为任何角度)——它们常见于指示板,用于显示收入和销售水平。
阅读以下文档了解更多有关设置圆形计量器角度的问题:
Circular Gauges Axis Angles。

?

查看示例

查看源代码

?

扇形计量器
扇形计量器(Quarter-Circular Gauge)是刻度范围为 90 度的圆形计量器(实际上可以为任何角度)。汽车仪表板上的燃料表一般都是扇形计量器。
阅读以下文档了解更多有关设置圆形计量器角度的问题:

Circular Gauges Axis Angles。

?

查看示例

查看源代码

液位计量器
液位计量器(Tank Gauge)酷似一个盛满液体的桶状物。它是一个简单的线性计量器,只是指针类型比较特别。这种类型的计量器极富吸引力且易于调整,液位计量器的属性与 Bar Pointer 大体类似。
阅读以下文档了解更多有关液位计量器的内容:
Tank Gauge
Vertical Linear Gauge Pointers
Tank Pointer Style

?

查看示例

查看源代码

?

?

?

温度计量器
?顾名思义,温度计量器(Thermometer Gauge)是一个水银温度计。可以在工作区中水平或垂直放置多个温度计量器。除了温度计柱的宽度外,还可以配置温度计水银泡的属性。它是一个简单的线性计量器,只是指针类型比较特别。
阅读以下文档了解更多有关温度计量器的内容:
Thermometer Gauge
线性计量器指针:Linear 和Horizontal
Thermometer Pointer Style

?

查看示例

查看源代码

交互式旋钮计量器
旋钮计量器(Knob Guage)使用针形指针,但它的旋钮帽较大,酷似齿轮,可以使用定制标记作为指针。有了旋钮计量器的帮助,可以模拟大型齿轮或控件。
阅读以下文档了解更多有关旋钮计量器的内容:
Knob Gauge
Circular Gauge Pointers
Knob Pointer Style

?


查看示例

查看源代码

垂直靶心图
靶心图(Bullet Graph)是 Stephen Few 发明的一种柱状图变体。它的灵感似乎来自很多指示板中都有的传统温度计图表和进度条,靶心图可以替代指示板计量器和仪表。有些靶心图还能够解决刻度盘和仪表的根本问题——显示的信息量太少,需要的空间太大,到处都是多余的装饰。靶心图只有一个主要的度量对象(例如,当年迄今为止的收入),并将该对象与其他参照物相比较,以赋予更多的含义(例如,与目标收入比较),并显示它的品质范围,比如差、满意、好。品质范围用不同强度的单色显示,以便色盲也能加以区分,并最大程度地降低了指示板上使用的颜色种类。
靶心图是一个简单的线性计量器,有两个(或多个)指针——一个是标记类型,另一个是柱类型。
阅读以下文档了解更多有关靶心图的内容:
Bullet Graphs
线性计量器指针:Linear 和Horizontal
Bar Pointer Style
Marker Pointer Style
?

?


查看示例

查看源代码

水平靶心图
水平靶心图与靶心图示例相同,只是方向是水平的。参见上文的文档链接。

?

?


查看示例

查看源代码

?

垂直线性计量器
垂直计量器是一个滑块,有一个或多个指针用于显示数值,计量器有一些刻度,通常是彩色的,以轻松区分不同的值。
阅读以下文档了解更多有关垂直计量器的内容:
Vertical Gauge XML Settings。

?


查看示例

查看源代码

水平线性计量器
水平计量器是一个滑块,有一个或多个指针用于显示数值,计量器有一些刻度,通常是彩色的,以轻松区分不同的值。
阅读以下文档了解更多有关水平计量器的内容:
Horizontal Gauge XML Settings。

?

?

?


查看示例

查看源代码

计量器指示板
在很多情况下,计量器的结构可能很复杂,一个计量器中可能“包含”另一个计量器(就像有好几个刻度盘的手表),又如,您可能希望并排放置多个计量器(就像汽车的仪表板)。
AnyChart 可以使用一个简单且易于理解的机制创建这种计量器。请参见下面这个示例天气指示板,并学习有关该主题的文档:
Complex Gauges。

?


查看示例

查看源代码

后记
希望这些示例和说明对您有所帮助,如有任何问题或评论,请联系我们: contact@anychart.com
要学习更多有关 AnyChart 的内容,请获取用户指南和 XML 参考资料: 下载完整的 AnyChart 评测包或在线查看文档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读