The following example shows how you can align the tick marks along the vertical and horizontal axis using the horizontalTickAligned and verticalTickAligned styles in the GridLines class, as seen in the following snippet:

<mx:GridLines direction="both"
    horizontalTickAligned="false"
    verticalTickAligned="false">

    ...

</mx:GridLines>

Full code after the jump.

View MXML

<?xml version="1.0"?>
<!-- http://blog.flexexamples.com/2007/11/19/aligning-data-in-a-flex-linechart-control-to-horizontal-and-vertical-tick-marks/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            import mx.charts.CategoryAxis;
            import mx.charts.chartClasses.IAxis;

            private function linearAxis_labelFunc(item:Object, prevValue:Object, axis:IAxis):String {
                return currFormatter.format(item);
            }

            private function categoryAxis_labelFunc(item:Object, prevValue:Object, axis:CategoryAxis, categoryItem:Object):String {
                var datNum:Number = Date.parse(item);
                var tempDate:Date = new Date(datNum);
                return tempDate.date.toString();
            }
        ]]>
    </mx:Script>

    <mx:CurrencyFormatter id="currFormatter" precision="2" />

    <mx:XMLListCollection id="dp">
        <mx:source>
            <mx:XMLList>
                <quote date="8/1/2007" open="40.29" close="39.58" />
                <quote date="8/2/2007" open="39.4" close="39.52" />
                <quote date="8/3/2007" open="39.47" close="38.75" />
                <quote date="8/6/2007" open="38.71" close="39.38" />
                <quote date="8/7/2007" open="39.08" close="39.42" />
                <quote date="8/8/2007" open="39.61" close="40.23" />
                <quote date="8/9/2007" open="39.9" close="40.75" />
                <quote date="8/10/2007" open="41.3" close="41.06" />
                <quote date="8/13/2007" open="41" close="40.83" />
                <quote date="8/14/2007" open="41.01" close="40.41" />
                <quote date="8/15/2007" open="40.22" close="40.18" />
                <quote date="8/16/2007" open="39.83" close="39.96" />
                <quote date="8/17/2007" open="40.18" close="40.32" />
                <quote date="8/20/2007" open="40.55" close="40.74" />
                <quote date="8/21/2007" open="40.41" close="40.13" />
                <quote date="8/22/2007" open="40.4" close="40.77" />
                <quote date="8/23/2007" open="40.82" close="40.6" />
                <quote date="8/24/2007" open="40.5" close="40.41" />
                <quote date="8/27/2007" open="40.38" close="40.81" />
            </mx:XMLList>
        </mx:source>
    </mx:XMLListCollection>

    <mx:ApplicationControlBar dock="true">
        <mx:Form styleName="plain">
            <mx:FormItem label="direction:">
                <mx:ComboBox id="comboBox">
                    <mx:dataProvider>
                        <mx:Array>
                            <mx:Object label="both" />
                            <mx:Object label="horizontal" />
                            <mx:Object label="vertical" />
                        </mx:Array>
                    </mx:dataProvider>
                </mx:ComboBox>
            </mx:FormItem>
            <mx:FormItem label="horizontalTickAligned:">
                <mx:CheckBox id="hCheckBox" selected="true" />
            </mx:FormItem>
            <mx:FormItem label="verticalTickAligned:">
                <mx:CheckBox id="vCheckBox" selected="true" />
            </mx:FormItem>
        </mx:Form>
    </mx:ApplicationControlBar>

    <mx:LineChart id="lineChart"
            showDataTips="true"
            dataProvider="{dp}"
            width="100%"
            height="100%">

        <!-- background elements -->
        <mx:backgroundElements>
            <mx:GridLines direction="{comboBox.selectedItem.label}"
                    horizontalTickAligned="{hCheckBox.selected}"
                    verticalTickAligned="{vCheckBox.selected}">
                <mx:horizontalFill>
                    <mx:SolidColor color="haloBlue" alpha="0.2" />
                </mx:horizontalFill>
                <mx:horizontalAlternateFill>
                    <mx:SolidColor color="haloSilver" alpha="0.2" />
                </mx:horizontalAlternateFill>
                <mx:verticalFill>
                    <mx:SolidColor color="haloBlue" alpha="0.2" />
                </mx:verticalFill>
                <mx:verticalAlternateFill>
                    <mx:SolidColor color="haloSilver" alpha="0.2" />
                </mx:verticalAlternateFill>
            </mx:GridLines>
        </mx:backgroundElements>

        <!-- vertical axis -->
        <mx:verticalAxis>
            <mx:LinearAxis baseAtZero="false"
                    title="Price"
                    labelFunction="linearAxis_labelFunc" />
        </mx:verticalAxis>

        <!-- horizontal axis -->
        <mx:horizontalAxis>
            <mx:CategoryAxis id="ca"
                    categoryField="@date"
                    title="August 2007"
                    labelFunction="categoryAxis_labelFunc" />
        </mx:horizontalAxis>

        <!-- horizontal axis renderer -->
        <mx:horizontalAxisRenderers>
            <mx:AxisRenderer axis="{ca}" canDropLabels="true" />
        </mx:horizontalAxisRenderers>

        <!-- series -->
        <mx:series>
            <mx:LineSeries yField="@open" displayName="Open" />
            <mx:LineSeries yField="@close" displayName="Close" />
        </mx:series>

        <!-- series filters -->
        <mx:seriesFilters>
            <mx:Array />
        </mx:seriesFilters>
    </mx:LineChart>

</mx:Application>

View source is enabled in the following example.

 
About The Author

Peter deHaan

Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.

3 Responses to Aligning data in a Flex LineChart control to horizontal and vertical tick marks

  1. Anonymous says:

    shouldnt the title be “aligning GridLines [...]“

  2. Is there a way to make the vertical ticks to each horizontal tick?

    The result would be a square grid with each interval on the x axis equal to the interval on the y axis.

    Thanks.

  3. Gen says:

    Hi,

    Thanks for this, it’s really useful for me, I just have a question, when I flip the axis, ie make the y axis a category axis and the x axis the linear one, I see a line on the middle of the first y category.

    Below is a sample code, when rendered, you will see that there is a line across the middle of Jan, I can’t seem to be able to get rid of this unless I set the alpha property of the gridlines to 0, but of course that gets rid of all the grid lines too.

    Any help you might be able to provide would be greatly appreciated.

    Thanks!

    Anti-Spam Protection by WP-SpamFree