how to calculate percentage value at the top of bar.

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
varunbhardwaj
Posts: 1
Joined: Wed Jul 09, 2014 5:39 am
antibot: No, of course not.

how to calculate percentage value at the top of bar.

Post by varunbhardwaj » Wed Jul 09, 2014 5:52 am

i have made a bar chart using jfree chart:
Image
please tell me how can i calculate percentage value instead of getting a Number instance at the top of each bar.
each value should calculate its own percentage with respect to highest value i.e- 15 .
currently i have set label using

Code: Select all

package barchartdem;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.FieldPosition;
import java.text.NumberFormat;
import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.Locale;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.gantt.XYTaskDataset;
import org.jfree.data.general.AbstractDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;
/**
 * A simple demonstration application showing how to create a bar chart.
 *
 */


public class BarChartDem extends ApplicationFrame    {
    

    /**
     * Creates a new demo instance.
     *
     * @param title  the frame title.
     */
    public BarChartDem(final String title) {

        super(title);

        final CategoryDataset dataset = createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(600, 670));
        setContentPane(chartPanel);
        

    }

    /**
     * Returns a sample dataset.
     * 
     * @return The dataset.
     */
    private CategoryDataset createDataset() {
        
        // row keys...
        final String series1 = "Categories";
        int t =0;

        // column keys...
        final  ArrayList<String> category1 = new ArrayList<>();
        category1.add("Category A");
        final  ArrayList<String> category2 = new ArrayList<>();
        category2.add("Category B");
        final  ArrayList<String> category3 = new ArrayList<>();
        category3.add("Category C");
        final  ArrayList<String> category4 = new ArrayList<>();
        category4.add("Category D");
        final  ArrayList<String> category5 = new ArrayList<>();
        category5.add("Category E");

        // create the dataset...
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
       
        dataset.addValue(1.0, series1, category1.get(0));
        dataset.addValue(4.5, series1, category2.get(0));
        dataset.addValue(3.5, series1, category3.get(0));
        dataset.addValue(19.0, series1, category4.get(0));
        dataset.addValue(2.0, series1, category5.get(0));
        
       
        /*int d =dataset.getColumnIndex(category4.get(0));
       System.out.println(d);
        */
        final AbstractDataset dataset1  = new AbstractDataset () {};
        
        
      int L1 = dataset.getValue(series1, category1.get(t)).intValue();
      int L2 = dataset.getValue(series1, category2.get(t)).intValue();
      int L3 = dataset.getValue(series1, category3.get(t)).intValue();
      int L4 = dataset.getValue(series1, category4.get(t)).intValue();
      int L5 = dataset.getValue(series1, category5.get(t)).intValue();
  
      
      int L[] = { L1,L2,L3,L4,L5};
      int largest=L[0];
      for(int x=0;x<L.length;x++)
      {
          if(L[x]>largest){
              largest=L[x];
          }
      }
      int F1= L1/largest;
      int F2=L2/largest;
      int F3=L3/largest;
      int F4=L4/largest;
      int F5=L5/largest;
      
        dataset.addChangeListener(null);
        
        return dataset;
        
    }
    
    /**
     * Creates a sample chart.
     * 
     * @param dataset  the dataset.
     * 
     * @return The chart.
     */
    private JFreeChart createChart(final CategoryDataset dataset) {
        
        // create the chart...
        final JFreeChart chart = ChartFactory.createBarChart(
            "Bar Graph",         // chart title
            "Category",               // domain axis label
            "Value (%)",                  // range axis label
            dataset,                  // data
            PlotOrientation.VERTICAL, // orientation
            true,                     // include legend
            true,                     // tooltips?
            false                     // URLs?
        );

        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

        // set the background color for the chart...
        chart.setBackgroundPaint(Color.white);
        

        // get a reference to the plot for further customisation...
        final CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.black);
        plot.setRangeGridlinePaint(Color.red);
        
        // set the range axis to display integers only...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        
        rangeAxis.setTickLabelFont(new Font("Roman",Font.ITALIC,12));
        rangeAxis.setTickUnit(new NumberTickUnit(1, new DecimalFormat("##")));
        
        
        
       
        
        // disable bar outlines...
        final BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        
        //int a = Integer.parseInt("{2}");
        //System.out.println(a);
        
        
        renderer.setSeriesItemLabelGenerator(0, new StandardCategoryItemLabelGenerator("{2}",NumberFormat.getInstance()));
        //renderer.setSeriesItemLabelGenerator(indexSeries, generator);
        //renderer.setSeriesItemLabelsVisible(indexSeries, true);
        //renderer.setSeriesPositiveItemLabelPosition(indexSeries, new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12 TextAnchor.BOTTOM_CENTER, TextAnchor.CENTER,0));
        
         /* StandardCategoryItemLabelGenerator   C =   new StandardCategoryItemLabelGenerator();
          C.generateLabel(dataset, 1, 1);
          */
        
        String substring = NumberFormat.getNumberInstance().toString().substring(0);
        System.out.println(substring);
        renderer.setSeriesCreateEntities(100, true);
        
 
        renderer.setSeriesItemLabelsVisible(0, true);
        chart.getCategoryPlot().setRenderer(renderer);
        
        // set up gradient paints for series...
        final GradientPaint gp0 = new GradientPaint(
            0.0f, 0.0f, Color.blue, 
            0.0f, 0.0f, Color.black
        );
        final GradientPaint gp1 = new GradientPaint(
            0.0f, 0.0f, Color.blue, 
            0.0f, 0.0f, Color.lightGray
        );
        final GradientPaint gp2 = new GradientPaint(
            0.0f, 0.0f, Color.red, 
            0.0f, 0.0f, Color.lightGray
        );
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        renderer.setSeriesPaint(2, gp2);

        final CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(
            CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
        );
        
        // OPTIONAL CUSTOMISATION COMPLETED.
        
        return chart;
        
    }
    
       
   
    public static void main(final String[] args) {

        final BarChartDem demo = new BarChartDem("Simple Bar Graph");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }

}

Locked