Menu

#718 Cannot overlay bar over bar in overlay chart

closed-fixed
General (896)
5
2014-08-20
2007-02-08
Anonymous
No

I cannot overlay one bar chart over another barchart.

Please note the values for R1 on the chart are all at the same level, but in the dataset the values are all different. This is a bug. I have noticed that anytime that the bar rendereer is used for values associated with the right hand axis this happens, even if the renderer on the left hand side is a line.

The following compiles and is ready to run.

Rachel

/* -------------------------
* OverlaidBarOnBarChartDemo1.java
* -------------------------
*
*/

import javax.swing.JPanel;

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.ValueAxis;
import org.jfree.chart.labels.CategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
* A simple demonstration application showing how to create a bar chart overlaid
* with a line chart.
*/
public class OverlaidBarOnBarChartDemo1 extends ApplicationFrame {

/**
* Default constructor.
*
* @param title the frame title.
*/
public OverlaidBarOnBarChartDemo1(String title) {

super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);

}

/**
* Creates a demo chart.
*
* @return A chart.
*/
public static JFreeChart createChart() {
// create the first dataset...
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
dataset1.addValue(1.0, "S1", "Category 1");
dataset1.addValue(4.0, "S1", "Category 2");
dataset1.addValue(3.0, "S1", "Category 3");
dataset1.addValue(5.0, "S1", "Category 4");
dataset1.addValue(5.0, "S1", "Category 5");
dataset1.addValue(7.0, "S1", "Category 6");
dataset1.addValue(7.0, "S1", "Category 7");
dataset1.addValue(8.0, "S1", "Category 8");

dataset1.addValue(5.0, "S2", "Category 1");
dataset1.addValue(7.0, "S2", "Category 2");
dataset1.addValue(6.0, "S2", "Category 3");
dataset1.addValue(8.0, "S2", "Category 4");
dataset1.addValue(4.0, "S2", "Category 5");
dataset1.addValue(4.0, "S2", "Category 6");
dataset1.addValue(2.0, "S2", "Category 7");
dataset1.addValue(1.0, "S2", "Category 8");

// create the first renderer...
CategoryItemLabelGenerator generator
= new StandardCategoryItemLabelGenerator();
CategoryItemRenderer renderer = new BarRenderer();
renderer.setItemLabelGenerator(generator);
renderer.setItemLabelsVisible(true);

CategoryPlot plot = new CategoryPlot();
plot.setDataset(dataset1);
plot.setRenderer(renderer);

plot.setDomainAxis(new CategoryAxis("Category"));
plot.setRangeAxis(new NumberAxis("Value"));

plot.setOrientation(PlotOrientation.VERTICAL);
plot.setRangeGridlinesVisible(true);
plot.setDomainGridlinesVisible(true);

// now create the second dataset and renderer...
DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
dataset2.addValue(9.0, "T1", "Category 1");
dataset2.addValue(7.0, "T1", "Category 2");
dataset2.addValue(2.0, "T1", "Category 3");
dataset2.addValue(6.0, "T1", "Category 4");
dataset2.addValue(6.0, "T1", "Category 5");
dataset2.addValue(9.0, "T1", "Category 6");
dataset2.addValue(5.0, "T1", "Category 7");
dataset2.addValue(4.0, "T1", "Category 8");

CategoryItemRenderer renderer2 = new BarRenderer();
plot.setDataset(1, dataset2);
plot.setRenderer(1, renderer2);

// create the third dataset and renderer...
ValueAxis rangeAxis2 = new NumberAxis("Axis 2");
plot.setRangeAxis(1, rangeAxis2);

DefaultCategoryDataset dataset3 = new DefaultCategoryDataset();
dataset3.addValue(94.0, "R1", "Category 1");
dataset3.addValue(75.0, "R1", "Category 2");
dataset3.addValue(22.0, "R1", "Category 3");
dataset3.addValue(74.0, "R1", "Category 4");
dataset3.addValue(83.0, "R1", "Category 5");
dataset3.addValue(9.0, "R1", "Category 6");
dataset3.addValue(23.0, "R1", "Category 7");
dataset3.addValue(98.0, "R1", "Category 8");

plot.setDataset(2, dataset3);
CategoryItemRenderer renderer3 = new BarRenderer();
plot.setRenderer(2, renderer3);
plot.mapDatasetToRangeAxis(2, 1);

// change the rendering order so the primary dataset appears "behind" the
// other datasets...
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45);
JFreeChart chart = new JFreeChart(plot);
chart.setTitle("Overlaid Bar On Bar Chart");
return chart;
}

/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createChart();
return new ChartPanel(chart);
}

/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {

OverlaidBarOnBarChartDemo1 demo = new OverlaidBarOnBarChartDemo1(
"Overlaid Bar On Bar Chart Demo"
);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);

}

}

Discussion

  • David Gilbert

    David Gilbert - 2007-02-10
    • assigned_to: nobody --> mungady
    • status: open --> closed-fixed
     
  • Nobody/Anonymous

    Logged In: NO

    Does this mean that I need to change something in my code? If so, what?

    Does this mean that I need to change something in one of the class files that come with JFreeChart? If so, what class(es)?

     
  • David Gilbert

    David Gilbert - 2007-02-14

    Logged In: YES
    user_id=112975
    Originator: NO

    The fix is included in JFreeChart version 1.0.4 which was released at the end of last week. So you just need to download the latest release.

    Regards,

    Dave Gilbert
    JFreeChart Project Leader

     

Log in to post a comment.