Adding custom labels to a Flex ColumnChart control’s column series

by Peter deHaan on November 25, 2007

in Charting, ColumnChart

The following example shows how you can create custom labels for a ColumnChart control’s ColumnSeries in Flex, as well as creating custom label functions for a linear axis and custom data tips for the ColumnChart control.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/11/25/adding-custom-labels-to-a-flex-columnchart-controls-column-series/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            import mx.charts.ChartItem;
            import mx.charts.HitData;
            import mx.charts.chartClasses.IAxis;
            import mx.charts.chartClasses.Series;
            import mx.charts.series.ColumnSet;
            import mx.charts.series.items.ColumnSeriesItem;
            import mx.utils.StringUtil;

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

            private function columnChart_dataTipFunc(item:HitData):String {
                var cSI:ColumnSeriesItem = item.chartItem as ColumnSeriesItem;
                var col:String = ColumnSeries(item.element).yField;
                return StringUtil.substitute("<b>{0}</b><br>{1}: {2}", cSI.item.name, col, numberFormatter.format(cSI.item[col]));
            }

            private function columnSeries_labelFunc(chartItem:ChartItem, series:Series):String {
                var col:String = ColumnSeries(chartItem.element).yField;
                return numberFormatter.format(chartItem.item[col]);
            }
        ]]>
    </mx:Script>

    <mx:NumberFormatter id="numberFormatter" precision="3" />

    <mx:Array id="arr">
        <mx:Object name="R Winn" obp=".353" slg=".445" avg=".300" />
        <mx:Object name="P Feliz" obp=".290" slg=".418" avg=".253" />
        <mx:Object name="O Vizquel" obp=".305" slg=".316" avg=".246" />
        <mx:Object name="B Molina" obp=".298" slg=".433" avg=".276" />
        <mx:Object name="R Durham" obp=".295" slg=".343" avg=".218" />
    </mx:Array>

    <mx:ApplicationControlBar dock="true">
        <mx:Legend dataProvider="{columnChart}" direction="horizontal" />
    </mx:ApplicationControlBar>

    <mx:ColumnChart id="columnChart"
            showDataTips="true"
            dataProvider="{arr}"
            dataTipFunction="columnChart_dataTipFunc"
            columnWidthRatio="0.9"
            type="stacked"
            width="100%"
            height="100%">

        <mx:horizontalAxis>
            <mx:CategoryAxis id="ca" categoryField="name" />
        </mx:horizontalAxis>

        <mx:verticalAxis>
            <mx:LinearAxis labelFunction="linearAxis_labelFunc" />
        </mx:verticalAxis>

        <mx:horizontalAxisRenderers>
            <mx:AxisRenderer axis="{ca}" />
        </mx:horizontalAxisRenderers>

        <mx:series>
            <mx:ColumnSeries id="avgSeries"
                    xField="name"
                    yField="avg"
                    displayName="Batting Average (AVG)"
                    labelPosition="inside"
                    labelFunction="columnSeries_labelFunc" />

            <mx:ColumnSeries id="obpSeries"
                    xField="name"
                    yField="obp"
                    displayName="On-base Percentage (OBP)"
                    labelPosition="inside"
                    labelFunction="columnSeries_labelFunc" />

            <mx:ColumnSeries id="slgSeries"
                    xField="name"
                    yField="slg"
                    displayName="Slugging Percentage (SLG)"
                    labelPosition="inside"
                    labelFunction="columnSeries_labelFunc" />
        </mx:series>

        <mx:seriesFilters>
            <mx:Array />
        </mx:seriesFilters>

    </mx:ColumnChart>

</mx:Application>

View source is enabled in the following example.

{ 14 comments… read them below or add one }

1 valentineday November 27, 2007 at 1:58 pm

no more online preview?

Reply

2 peterd November 27, 2007 at 2:20 pm

Sorry, I’ve just had some problems with my Internet and FTP at home so I haven’t been able to upload the SWFs. I’ll go back tonight and try and add the missing SWFs.

Peter

Reply

3 Mauricio November 28, 2007 at 10:51 am

This sample it’s for flex 2 or flex 3, because in flex 2 I got a problemn with the labelposition=”inside” in column series. Could you help me with that, please ?
Sample Code:

problem: “Cannot resolve attribute ‘labelPosition’ for component mx.charts.series.ColumnSeries ”
:(

Reply

4 peterd November 28, 2007 at 11:58 am

All the samples are built using various builds of the Flex 3 SDK, sorry.

Peter

Reply

5 WebGyver December 5, 2007 at 6:01 am

First of all, thank you for posting Flex code snippets and examples. For a Flex newbie like me, this is awesome stuff.

And please keep it up. I’ll be stopping by here regularly.

Reply

6 Mani December 13, 2007 at 4:05 am

Hi everybody,

pls see the following link. this is for columnchart with label.

http://demo.quietlyscheming.com/chartBackgrounds/app.html

Reply

7 Enzo Canuzzi February 8, 2008 at 7:21 am

Hi thanks, fort your work! But I have one question – do you know how i can access the total value of a stack in the datatipfunction?

Reply

8 smote me April 9, 2008 at 7:11 pm

I love people who ask for help on blogs, read the docs, read the source, try a Google search why don’t you.

It’s even more fun when they ask totally unrelated questions. Luv it.

Smoted

Reply

9 Andrew price July 28, 2008 at 9:04 am

Have you had any problems with charts when only 1 col is the chart.

The code below work but will not change the a chart with on one col

can you help

Reply

10 Rogelio March 26, 2009 at 11:54 am

Hi everybody I think that this examples are very helpful, I have a problem,I want to change the order of the legend in a Stacked Column Chart for the color have an order like the stacked char, thanks.

Reply

11 krunal June 25, 2009 at 7:30 am

but my column chart type is overlaid, how can we set the lable position in it? and can we draw a chart with more than 3 stacks and one line chart?

Reply

12 Santiago July 1, 2009 at 12:39 am

Can I set the data label inside each column and show it vertically. I tried to use the showLabelVertically=”true” but is not working. Im using flex 3

Thanks

Reply

13 Nash Owen October 2, 2009 at 11:50 am

How would I take the above example with the data embedded inside the columns and apply styles/formatting to it such as as a drop shadow. I’ve stumbled upon how to apply a drop shadow to the column itself but not to the actual text that is inside of it.

Reply

14 vkanwal March 9, 2010 at 3:16 am

Hi
Any body can help me in this :
Is there any way that i can keep a check on items i want to display in legend (based on some condition , lets say if data is coming 0 throughout for particular series and i have multiple series in my graph .I want only those series to be shown in legend whose data is not 0)
In case i am dynamically providing dataprovider to legend i.e( legend.dataProvider = myChart).

Thanks
Varun

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: