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
Bar Chart Problem
-
- JFreeChart Project Leader
- Posts: 11734
- Joined: Fri Mar 14, 2003 10:29 am
- antibot: No, of course not.
- Contact:
You can use the ClusteredXYBarRenderer for this.
David Gilbert
JFreeChart Project Leader
Read my blog
Support JFree via the Github sponsorship program
JFreeChart Project Leader

