`
chensong215
  • 浏览: 27281 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2012-03-09 14:26 LineChart实现双Y坐标

    博客分类:
  • flex
 
阅读更多
效果图:




LineChart文件内容:

<?xml version="1.0" encoding="utf-8"?>
<s:VGroup gap="0" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<fx:Script>
  <![CDATA[
   import mx.binding.utils.BindingUtils;
   import mx.collections.ArrayCollection;

   import spark.components.CheckBox;

   public static const VERTICALAXISLEFT:String = 'verticalAxisLeft';
   public static const VERTICALAXISRIGHT:String = 'verticalAxisRight';
   [Bindable]
   /* 数据源 */
   private var _dataProvider:ArrayCollection;
   [Bindable]
   /* 水平轴上的绑定字段 ,默认空*/
   private var _categoryField:String = '';
   [Bindable]
   /* 水平轴上的标题 ,默认空*/
   private var _title:String = '';
   [Bindable]
   /* 是否显示左边的刻度线,默认true */
   private var _calibrationLeft:Boolean = true;
   [Bindable]
   /* 是否显示右边的刻度线,默认false */
   private var _calibrationRight:Boolean = false;
   [Bindable]
   /* 在垂直轴上显示的内容,可多个 ,格式 {yField:'字段',displayName:'提示标题',align:}*/
   private var _lineSeriesArray:Array;

   public function set dataProvider(value:ArrayCollection):void {
    _dataProvider = value;
   }

   public function set categoryField(value:String):void {
    _categoryField = value;
   }

   public function set title(value:String):void {
    _title = value;
   }

   public function set calibrationRight(value:Boolean):void {
    _calibrationRight = value;
   }

   public function set calibrationLeft(value:Boolean):void {
    _calibrationLeft = value;
   }

   public function set lineSeriesArray(value:Array):void {
    _lineSeriesArray = value;
    if (_lineSeriesArray) {
     var check:CheckBox;
     var target:mx.charts.LineChart = mx.charts.LineChart(this.getChildAt(1));
     colorList.removeAll();
     while (_lineSeriesArray.length > 0) {
      var item:Object = _lineSeriesArray.pop();
      var series:LineSeries = new LineSeries;
      series.horizontalAxis = h1;
      series.yField = item.yField;
      series.displayName = item.displayName;
      if (item.align == VERTICALAXISLEFT) {
       series.verticalAxis = v1;
      } else if (item.align == VERTICALAXISRIGHT) {
       series.verticalAxis = v2;
      }
      var storkt:SolidColorStroke = new SolidColorStroke();
      //随机生成颜色colorArr[i]
      storkt.color = bulidColor();
      storkt.weight = 1;
      series.setStyle("lineStroke", storkt);
      target.series.push(series);
      target.series = target.series;

      check = new CheckBox;
      check.setStyle('color', storkt.color);
      check.label = item.displayName;
      check.selected = true;
      tools.addElement(check);

      BindingUtils.bindProperty(series, 'visible', check, 'selected');
      BindingUtils.bindProperty(series, 'includeInLayout', check, 'selected');
     }
    }
   }

   private var source:Array = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F'];

   private var colorList:ArrayCollection = new ArrayCollection;

   private function bulidColor():uint {
    var color:String = '0x';
    var index:Number;
    for (var i:int = 0; i < 6; i++) {
     //0-15之间的随机数,不包含15
     index = Math.round(Math.random() * 15);
     color += source[index];
    }
    if (colorList.contains(color)) {
     bulidColor();
    } else {
     colorList.addItem(color);
    }
    return mx.core.Singleton.getInstance("mx.styles::IStyleManager2").getColorName(color);
   }
  ]]>
</fx:Script>
<s:HGroup id="tools" gap="15" width="100%" horizontalAlign="center" verticalAlign="middle" height="30"/>
<mx:LineChart seriesFilters="[]" dataProvider="{_dataProvider}" showDataTips="true" width="100%" height="100%">
  <!--backgroundElements:背景设置-->
  <mx:backgroundElements>
   <mx:GridLines horizontalTickAligned="false" verticalTickAligned="false">
    <mx:verticalStroke>
     <mx:SolidColorStroke id="ss" color="#a6cecd" weight="1" alpha="0.4"/>
    </mx:verticalStroke>
    <mx:horizontalStroke>
     <mx:SolidColorStroke color="#a6cecd" weight="1" alpha="0.6"/>
    </mx:horizontalStroke>
   </mx:GridLines>
  </mx:backgroundElements>

  <!--categoryField:横坐标数据节点-->
  <mx:horizontalAxis>
   <mx:CategoryAxis id="h1" categoryField="{_categoryField}" title="{_title}"/>
  </mx:horizontalAxis>
  <mx:horizontalAxisRenderers>
   <mx:AxisRenderer placement="bottom" axis="{h1}"/>
  </mx:horizontalAxisRenderers>

  <!--纵坐标-->
  <mx:verticalAxisRenderers>
   <mx:AxisRenderer axisStroke="{ss}" placement="left" axis="{v1}" visible="{_calibrationLeft}"
        includeInLayout="{_calibrationLeft}"/>
   <mx:AxisRenderer axisStroke="{ss}" placement="right" axis="{v2}" visible="{_calibrationRight}"
        includeInLayout="{_calibrationRight}"/>
  </mx:verticalAxisRenderers>

  <mx:series>
   <!--纵坐标轴1-->
   <mx:LineSeries id="w__sasfw" horizontalAxis="{h1}" visible="false" includeInLayout="false">
    <mx:verticalAxis>
     <mx:LinearAxis id="v1" title=""/>
    </mx:verticalAxis>
   </mx:LineSeries>
   <!--纵坐标轴2-->
   <mx:LineSeries horizontalAxis="{h1}" visible="false" includeInLayout="false">
    <mx:verticalAxis>
     <mx:LinearAxis id="v2" title=""/>
    </mx:verticalAxis>
   </mx:LineSeries>
  </mx:series>
</mx:LineChart>
</s:VGroup>



测试文件内容:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:charts="com.charts.*">
<s:layout>
  <s:VerticalLayout/>
</s:layout>
<fx:Script>
  <![CDATA[
   import mx.collections.ArrayCollection;
   import mx.events.FlexEvent;

   [Bindable]
   private var expensesAC: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}, {Month: "Apr", Profit: 1800, Expenses: 1200, Amount: 900}, {Month: "May", Profit: 2400, Expenses: 575, Amount: 500}]);

   override protected function createChildren():void {
    addEventListener(FlexEvent.APPLICATION_COMPLETE, function(e:FlexEvent):void {
     var source:Array = [{yField: 'Profit', displayName: '利润', align: LineChart.VERTICALAXISLEFT}, {yField: 'Expenses', displayName: '开支', align: LineChart.VERTICALAXISLEFT}, {yField: 'Amount', displayName: '金额', align: LineChart.VERTICALAXISRIGHT}];
     chart.lineSeriesArray = source;
    });
    super.createChildren();
   }
  ]]>
</fx:Script>
<!-- Define custom colors for use as fills in the AreaChart control. -->
<charts:LineChart id="chart" width="100%" height="100%" calibrationRight="true" dataProvider="{expensesAC}" categoryField="Month"
       title="这是测试,可以改啊"/>
</s:Application>


分享到:
评论

相关推荐

    Android-LineChart图标显示多条曲线

    在Android开发中,数据可视化是十分重要的,LineChart作为一种常用的数据展示方式,常用于呈现趋势或者比较多个数据系列。本文将深入探讨如何在Android应用中使用LineChart来显示多条曲线,帮助开发者创建出直观、易...

    Highcharts中文文档

    Highcharts是一款纯JavaScript实现的图表库,可以方便地在Web应用中创建交互式的图表。它支持多种图表类型,包括折线图、柱状图、饼图等,并且提供了丰富的自定义选项。 #### 二、Highcharts基本配置详解 ##### ...

    C#画图,画线源码 LineChart

    为了创建LineChart,你需要遍历这些数据,将每个数据点映射到图表的X轴和Y轴坐标上。同时,你还需要考虑如何适当地缩放和对齐坐标轴,以及添加网格线以提高可读性。 6. 控件与事件:在Windows Forms或WPF环境中,...

    MPAndroidChart中的LineChart

    下面我们将详细探讨如何在MPAndroidChart中使用LineChart,并实现其基本功能。 首先,让我们了解MPAndroidChart库。这个库由Phil Jay开发,支持多种图表类型,如线图、条形图、饼图等,且具有高度定制性,适用于...

    Line Chart

    描述 "LineChart" 明确指出我们要讨论的是与iOS相关的线形图实现。在iOS开发中,可以使用各种库来创建美观且功能丰富的线形图。其中,`ios-linechart-master`这个压缩包很可能包含了一个iOS线形图的开源项目或框架,...

    MPchart多样化坐标轴

    - MPChart支持图表的动态加载和更新,`Chart.animateX()` 和 `Chart.animateY()` 方法可以实现X轴和Y轴的平滑动画效果。 6. **其他高级功能**: - `XAxis.setPosition(XAxis.XAxisPosition position)` 改变X轴的...

    HighchartsAPI中文翻译(表格版)

    - **pane**:窗格选项,只适用于极坐标图和角度测量仪。 - **plotOptions**:绘图选项,包括不同类型的图表(如区域图、柱状图等)的默认设置。 ##### 2. 绘图类型配置示例 - **area**:区域图 - **arearange**:...

    JFreeChartDeveloperGuide_Version_0.9.21官方文档

    - **折线图(Line Charts)** - 折线图用于显示数据随时间变化的趋势。 - **特性**: - 支持多个数据系列。 - 支持自定义标记和线条样式。 - 可以显示工具提示和图例。 - 支持动态更新数据。 - **XY图(XY Plots)...

    MFC中MSChart的使用示例

    - **X/Y**:图表在绘图区内左上角的坐标。 - **Position**:与`InnerPlotPosition`类似,用于控制图表的位置。 - **Axis**:用于设置坐标轴的相关属性。 - **Title**:坐标轴标题。 - **TitleAlignment**:坐标...

    Android 双y坐标折线图,可以画单线

    在提供的压缩包文件"MyDemo"中,应该包含了示例项目的源代码,通过查看和运行这个项目,开发者可以更直观地了解如何实现双Y坐标折线图。在学习过程中,建议结合源代码进行实践,以便更好地理解和掌握相关知识。

    OpenFlashChart目前最详细的线形图模板

    - **text**:标签文本格式化字符串,其中 `#val#` 会被对应的坐标值替代。 - **labels** 数组用于自定义特定坐标的标签样式: - **x**:指定标签所在的位置坐标。 - **text**:标签文本,可以覆盖默认的 `#val#`...

    介绍MSChart的常用属性和事件

    series1.ChartType = SeriesChartType.Line; series1.Name = "Series1"; series1.IsValueShownAsLabel = true; // 添加数据点 series1.Points.AddXY("Jan", 5); series1.Points.AddXY("Feb", 12); series1.Points....

    jfreechart-0.9.20-US-v2.pdf

    #### 2.3 折线图 (Line Chart) - **定义**:折线图通过连续的线条来显示数据随时间的变化趋势。 - **应用场景**:适合展示数据随时间变化的趋势。 #### 2.4 XY 图 (XY Plots) - **定义**:XY 图使用 X 轴和 Y 轴...

    Smobiler实现linechart源码

    本篇将详细介绍如何在Smobiler中实现线状图(LineChart)。 线状图是一种常见的图表类型,常用于展示数据随时间变化的趋势。在Smobiler中,我们可以使用其内置的图表组件来创建线状图,以便在移动应用中呈现动态和...

    TeeChart使用总结

    Steema.TeeChart.Styles.Line line1 = new Steema.TeeChart.Styles.Line(WebChart1.Chart); WebChart1.Chart.Series.Add(line1); ``` - 设置数据源和显示文本。 - 示例代码: ```csharp line1.YValues....

    前端项目-Chart.js.zip

    通过以上介绍,我们可以看到Chart.js是一个强大且实用的前端绘图工具,它不仅简化了数据可视化的实现过程,还提供了丰富的定制选项,能满足各种项目需求。无论你是初学者还是经验丰富的开发者,Chart.js都能成为你的...

    ichartjs1.0 自定义组件绘图Api

    - `x, y`: 弧线的中心坐标。 - `r`: 弧线的半径。 - `s, e`: 起始角和结束角。 - `c`: 是否顺时针绘制弧线。 2. **`beginPath()`** - 描述:开始一个新的路径。 3. **`closePath()`** - 描述:如果当前子...

    LineChart C#划曲线图

    这个控件是.NET Framework的一部分,位于System.Windows.Forms命名空间下,它提供了丰富的图表类型,包括线性图(LineChart)、柱状图(Histogram)和饼图(PieChart)。通过灵活地配置和设置各种属性,我们可以定制...

    R语言绘图大全

    ggplot(data, aes(x=x, y=y)) + geom_line() ``` ##### 3. 条形图 **条形图**常用于比较不同类别之间的数量差异。 - **`graphics::barplot()`基本用法** - 创建基本的条形图。 - 示例代码: ```r barplot...

Global site tag (gtag.js) - Google Analytics