The following example shows how you can create a linear gradient fill for a ColumnSeries in Flex.

Full code after the jump.

View MXML

<?xml version="1.0"?>
<!-- http://blog.flexexamples.com/2007/11/20/creating-a-linear-gradient-fill-on-a-columnchart-controls-column-series-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

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

            private function linearAxis_labelFunc(item:Object, prevValue:Object, axis:IAxis):String {
                return currencyFormatter.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 dateFormatter.format(tempDate).toUpperCase();
            }
        ]]>
    </mx:Script>

    <mx:DateFormatter id="dateFormatter" formatString="DD" />
    <mx:CurrencyFormatter id="currencyFormatter" 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:ColumnChart id="columnChart"
            showDataTips="true"
            dataProvider="{dp}"
            width="100%"
            height="100%">

        <!-- vertical axis -->
        <mx:verticalAxis>
            <mx:LinearAxis baseAtZero="false"
                    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:ColumnSeries displayName="Open"
                    xField="@date"
                    yField="@open">
                <mx:fill>
                    <mx:LinearGradient id="linearGradient">
                        <mx:entries>
                            <mx:Array>
                                <mx:GradientEntry color="red"
                                        ratio="0.0"
                                        alpha="1.0" />
                                <mx:GradientEntry color="black"
                                        ratio="1.0"
                                        alpha="1.0" />
                            </mx:Array>
                        </mx:entries>
                    </mx:LinearGradient>
                </mx:fill>
            </mx:ColumnSeries>
        </mx:series>

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

</mx:Application>

View source is enabled in the following example.

By default, the gradient goes left-to-right, if you want to create a vertical gradient or 45° gradient (or any arbitrary number), you can set the angle property in the LinearGradient tag, as seen in the following snippet:

<mx:LinearGradient id="linearGradient" angle="90">
    <mx:entries>
        <mx:Array>
            <mx:GradientEntry color="red"
                    ratio="0.0"
                    alpha="1.0" />
            <mx:GradientEntry color="black"
                    ratio="1.0"
                    alpha="1.0" />
        </mx:Array>
    </mx:entries>
</mx:LinearGradient>
 
Tagged with:
 
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.

7 Responses to Creating a linear gradient fill on a ColumnChart control’s column series in Flex

  1. Greg says:

    Hey Peter,

    How do I go about using gradient fills when setting the fill property via CSS? I’m trying…

    var linearGradient:LinearGradient = new LinearGradient();
    linearGradient.entries.push(new GradientEntry(0xF68620, 0, 1));
    linearGradient.entries.push(new GradientEntry(0xF68620, 0.5, 0.25));
    colSeries.setStyle(‘fill’, linearGradient);

    but it doesn’t apply the gradient. Is there a different CSS property to set when using gradients?

    Thanks,
    Greg.

  2. Javi says:

    Try it,

    var linearGradient:LinearGradient = new LinearGradient();
    var arr:Array = [];
    arr.push(new GradientEntry(0xF68620, 0, 1));
    arr.push(new GradientEntry(0xF68620, 0.5, 0.25));
    linearGradient.angle = 90;
    linearGradient.entries = arr;
    
    serie.setStyle("areaFill", linearGradient);
    
  3. wangyoude says:

    Hey Peter,

    when I use

    var linearGradient:LinearGradient = new LinearGradient();
    var arr:Array = [];
    arr.push(new GradientEntry(0xF68620, 0, 1));
    arr.push(new GradientEntry(0xF68620, 0.5, 0.25));
    linearGradient.angle = 90;
    linearGradient.entries = arr;
    
    serie.setStyle("areaFill", linearGradient);
    

    ,but it doesn’t work!

  4. Itay Cohen says:

    Any chance that we can set a different fill (non-gradient) for the legend?

  5. Shif says:

    Replaced ColumnChart to AreaChart and ColumnSeries to AreaSeries, and the gradient doesn’t work.
    Is it possible to make area chart with gradient? If yes how?
    thanx

  6. Dennis (Germany) says:

    Use:

    series.setStyle("fill", linearGradient);

    instead of:

    serie.setStyle("areaFill", linearGradient);
  7. Saumya says:

    Thank you for the information on this post. I found it very helpful!

Leave a Reply

Your email address will not be published.

You may 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