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);
}
}