Bar Chart Problem

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
Rajnesh
Posts: 19
Joined: Thu Jan 03, 2008 8:48 am

Bar Chart Problem

Post by Rajnesh » Sat Jan 05, 2008 9:15 am

Hi all
I want to create a bar chart using XYPLot but wht happen the different bars overlapped each other .Iwant to display every bar separately as in the Category plot .Is any soln for this problem
here is the code
package chart;



import java.awt.Color;
import java.text.NumberFormat;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.data.xy.IntervalXYZDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.VerticalAlignment;


public class BarChartDemo extends ApplicationFrame {

public BarChartDemo(final String title) {

super(title);

final IntervalXYDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);

}

private IntervalXYDataset createDataset() {

final XYSeries series1 = new XYSeries("First");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);

final XYSeries series2 = new XYSeries("Second");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);

final XYSeries series3 = new XYSeries("Third");
series3.add(3.0, 4.0);
series3.add(4.0, 3.0);
series3.add(5.0, 2.0);
series3.add(6.0, 3.0);
series3.add(7.0, 6.0);
series3.add(8.0, 3.0);
series3.add(9.0, 4.0);
series3.add(10.0, 3.0);

final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);

return dataset;

}
private IntervalXYDataset createDataset2() {
final XYSeries series = new XYSeries("Four");
series.add(1.0, 0.08);
series.add(2.0, 0.04);
series.add(3.0, 0.64);
series.add(4.0, 0.26);
series.add(5.0, 0.56);
series.add(6.0, 0.10);
series.add(7.0, 0.12);

final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}


private JFreeChart createChart(final IntervalXYDataset dataset) {

// create the chart...
final JFreeChart chart = ChartFactory.createXYBarChart(
"Bar Chart", // chart title
"X",
false,// x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);

// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
chart.setBackgroundPaint(Color.white);


// get a reference to the plot for further customisation...
final XYPlot plot = chart.getXYPlot();
plot.setDataset(1,createDataset2());
plot.mapDatasetToRangeAxis(1, 1);
// plot.setBackgroundPaint(Color.lightGray);
LegendTitle legend = (LegendTitle) chart.getLegend();
legend.setPosition(RectangleEdge.RIGHT);
legend.setVerticalAlignment(VerticalAlignment.TOP);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);

final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
final XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer();

renderer.setToolTipGenerator(new StandardXYToolTipGenerator());
plot.setRenderer(renderer);

// OPTIONAL CUSTOMISATION COMPLETED.
ValueAxis valAxis=(ValueAxis)plot.getDomainAxis();
valAxis.setRange(1.0,15.0);///////////Here we set the range of X Axis
valAxis=(ValueAxis)plot.getRangeAxis();
valAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
valAxis.setRange(0.0,25.0);//y Axis
// NumberAxis numAxis=(NumberAxis)plot.getRangeAxis();
NumberAxis numAxis=new NumberAxis("Value");
plot.setRangeAxis(1, numAxis);
numAxis.setRange(0.0,1.0);//Z Axis
numAxis.setNumberFormatOverride(NumberFormat.getPercentInstance());
//valAxis.set
return chart;

}


public static void main(final String[] args) {

final BarChartDemo demo = new BarChartDemo("Bar Chart");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);

}

}
Awaiting for ur reply
Thanx

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Mon Jan 07, 2008 12:54 pm

You can use the ClusteredXYBarRenderer for this.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

Locked