Skip navigation
Currently Being Moderated

Flex 3 Adding LineSeries via ActionScript

Jan 29, 2013 4:01 PM

Tags: #as3 #flex #3 #actionscript #charting_problem #lineseries

I have seen a few posts on this, and I have had my current code working, but when it doesn't work I find myself at a loss to be able to debug why.

 

My SensorReading object:

 

public class SensorReading

{

     public var SensorName:String;

      public var ChannelName:String;

     public var UOM:String;

     public var ReadingDate:Date;

     public var ReadingValue:String;

}

 

I can dynamically get up to 32 different channels of information. Each channel of data is an array of SensorReadings, and I receive an ArrayCollection of all the readings arrays (e.g. dataCollection.getItemAt(5) would receive the data array for channel #6's data).

 

All I get is blank charts (code below). I have set breakpoints on many locations, including creating debug functions for series.dataFunction and chart.click(), and the series all seem to be correct, and the dataProviders for each line appears to be correct.

 

Any thoughts on the issue would be greatly appreciated!

 

 

//view.chart is the LineChart target

// clear out any existing chart axis

var seriesArray:Array = new Array();

view.chart.series = seriesArray;

view.chart.verticalAxis = new LinearAxis();

 

 

// prepare for multiple axes if needed

var axisIndex:Array = new Array();

var axis:LinearAxis;

var axisRenderer:AxisRenderer;

var axisRenderers:Array = new Array();

 

 

// channel data collection

for ( var j:int = 0; j < channelDataColl.length; j++ )

{

          // get the first row of data to set up

          // the series information from

          reading = ( channelDataColl.getItemAt(j) as Array )[0] as SensorReading;

 

          // instance a new lineseries for this dataset

          var series:LineSeries = new LineSeries();

 

          var channelProvider:Array = channelDataColl.getItemAt(j) as Array;

          series.dataProvider = channelProvider;

          series.yField = "ReadingNumber";

          series.xField = "ReadingDate";

          series.displayName = reading.SensorName + "\n" +

                    reading.ChannelName + "\n" +

                    reading.UOM

 

          // if we have a new unit of measure, then

          // add a new vertical axis unless this is

          // the first one

          if ( axisIndex.indexOf( reading.UOM ) < 0 )

          {

                    axis = new LinearAxis();

                    axis.displayName = reading.UOM;

                    axis.title = reading.UOM;

                    axis.autoAdjust = true;

 

                    // check if this is the first axis

                    if ( axisIndex.length == 0 )

                    {

                              // work around a flex issue by using

                              // the default axis for the first axis

                              view.chart.verticalAxis = axis;

                    }

                    else

                    {

                              series.verticalAxis = axis;

                              axisRenderer = new AxisRenderer();

                              axisRenderer.axis = axis;

 

                              axisRenderers.push( axisRenderer );

                              view.chart.verticalAxisRenderers = axisRenderers;

                    }

 

                    // add uom to our existing list

                    axisIndex.push( reading.UOM );

          }

 

          // add this series to the chart

          var seriesArray:Array = view.chart.series;

          seriesArray.push( series );

          view.chart.series = seriesArray;

}

view.chart.invalidateDisplayList();

// end of code

 

 

// MXML

<mx:LineChart

          id="chart" width="100%" height="100%"

          showDataTips="true"

          seriesFilters="[]"

          click="onChartDebugClick( event )"

          dataTipFunction="formatDataTips">

 

          <mx:horizontalAxis>

                    <mx:DateTimeAxis

                              id="hAxis"

                              dataUnits="minutes"

                              title="Date"

                              alignLabelsToUnits="true"

                              displayLocalTime="true"

                              parseFunction="debugParseFunction"/>

          </mx:horizontalAxis>

 

          <mx:horizontalAxisRenderers>

                    <mx:AxisRenderer axis="{hAxis}"

                                                             showLine="true"

                                                             tickPlacement="outside"

                                                             />

          </mx:horizontalAxisRenderers>

 

 

</mx:LineChart>

 

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points