Chart Series Colors

  Below is the Birt reports javascript for forcing the color of a charts series and legend item based upon the values. Be sure that the series value match what comes out of the dataset

// ******* Forcing the color to the chart legend   ************//


    function beforeDrawLegendItem( lerh, bounds, icsc ){
   		 // capture the value of the series
    	var seriesLabel = lerh.getLabel().getCaption().getValue();
        if(seriesLabel == "Series Value"){
        lerh.getFill().set(0,128,255); // blue color
        }else if(seriesLabel == "Other Series Value"){
        	lerh.getFill().set(255,0,60);  // red color
           }
         }
    

//********** Forcing the color of the chart series based upon its value  *****//

    function beforeDrawDataPoint( dph, fill, icsc ){
    	var seriesValue = dph.getSeriesDisplayValue(); // capture the value of the series
        if(seriesValue == "Series Value"){
        	fill.set(0,128,255);  // blue color
            }else if(seriesValue == "Other Series Value"){
            fill.set(255,0,60); // red color
            }
          }
        }
   
If you want to have gradient colored series you can do the following:
	
    function beforeDrawDataPoint( dph, fill, icsc ){
    	var seriesLabel = dph.getSeriesDisplayValue()  // capture the value of the series
    importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl); // !!this is import to have!!	
    	if( fill.getClass().isAssignableFrom(GradientImpl)){
        if (seriesLabel =="seriesvalue_1"){
        	fill.getStartColor().set(0,128,255);
            fill.getEndColor().set(226,251,250);
            } else if(seriesLabel == "seriesvalue_2")
             {
           fill.getStartColor().set(144,12,63);
           fill.getEndColor().set(253,188,213);
           }// and so on
          

In order to have your chart legend the same as your series when it is gradient you will need to do the following:

  function beforeDrawLegendItem( lerh, bounds, icsc ){
  importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl);
  var seriesName = lerh.getLabel().getCaption().getValue();  // capture the value of the series
 var fill = lerh.getFill();
 if( fill.getClass().isAssignableFrom(GradientImpl)){
 if(seriesName == "seriesvlaue_1"){
 	fill.getStartColor().set(0,128,255);
    fill.getEndColor().set(226,251,250);
    } else if(seriesName == "seriesvalue_2")
    fill.getStartColor().set(144,12,63);
    fill.getEndColor().set(253,188,213);
    //and so on
  

You cannot script a series for a gradient fill color and script the legend for a solid color.  You have to have one or the other when scripting.  Kept getting an error that didn't make sense until I applied the same setup for the legend as I did for the series datapoint.

Need to give credit to http://birtworld.blogspot.com/2011/10/birt-chart-palette.html after a lot of searching.

Comments

Popular posts from this blog

Installing Birt Reports

Global Variables

Display Parameter Text