# JFreeChart StackedBar + Line-Chart kombinieren



## LukeVlbg (23. Jul 2009)

Kann man ein StackedBarChart und z.B. ein LineChart übereinanderlegen? Irgendwie bin ich nicht auf eine Lösung gekommen.

Hier mein Code:

```
import java.awt.Dimension;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
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;


public class LineStackedBarOverlaid extends ApplicationFrame {

	private static final long serialVersionUID = 1L;

	public LineStackedBarOverlaid(final String title) {
		
		super(title);
		final JFreeChart chart = createChart();
		final ChartPanel chartPanel = new ChartPanel(chart);
		chartPanel.setPreferredSize(new Dimension(500, 270));
		setContentPane(chartPanel);
	}

	private JFreeChart createChart() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		
		dataset.addValue(4.3, "Product 1 (US)", "Jan 04");
		dataset.addValue(5.4, "Product 1 (Europe)", "Jan 04");
		dataset.addValue(7.5, "Product 1 (Asia)", "Jan 04");
		dataset.addValue(7.3, "Product 2 (US)", "Jan 05");
        dataset.addValue(6.7, "Product 2 (Europe)", "Jan 05");
        dataset.addValue(6.4, "Product 2 (Asia)", "Jan 05");
        dataset.addValue(6.9, "Product 3 (US)", "Jan 06");
        dataset.addValue(8.3, "Product 3 (Europe)", "Jan 06");
        
        final CategoryItemRenderer renderer = new BarRenderer();
        final CategoryPlot plot = new CategoryPlot();
		plot.setDataset(dataset);
		plot.setRenderer(renderer);
		plot.setOrientation(PlotOrientation.VERTICAL);
		plot.setRangeGridlinesVisible(true);

		DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
		dataset2.addValue(9.0, "T1", "Category 1");
		dataset2.addValue(7.0, "T1", "Category 2");
		dataset2.addValue(8.0, "T1", "Category 3");
		dataset2.addValue(6.0, "T1", "Category 4");
		dataset2.addValue(6.0, "T1", "Category 5");
		dataset2.addValue(20.0, "T1", "Category 6");
		dataset2.addValue(5.0, "T1", "Category 7");
		dataset2.addValue(4.0, "T1", "Category 8");

		plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
		
		final JFreeChart chart = ChartFactory.createStackedBarChart(
				"Stacked Bar Chart", "Kategorie", "Value", dataset, PlotOrientation.VERTICAL, true, true, false);
		
		final CategoryItemRenderer renderer2 = new LineAndShapeRenderer();
		plot.setDataset(1, dataset2);
		plot.setRenderer(1, renderer2);
		
		return chart;
	}
	
	public static void main(String[] args) {
		final LineStackedBarOverlaid demo = new LineStackedBarOverlaid("Stacked Bar Chart");
		demo.pack();
		RefineryUtilities.centerFrameOnScreen(demo);
		demo.setVisible(true);
	}
	
}
;
```

Dachte es geht mit *plot.setDataset(1, dataset2)* und *plot.setRenderer(1, renderer2)*.


----------



## SlaterB (23. Jul 2009)

die angezeigte Chart hat mit dem plot-Objekt nichts zu tun,
erstelle keinen neuen Plot sondern schreibe
final CategoryPlot plot = chart.getCategoryPlot();

danach gehts dann schon einigermaßen, aber du solltest einheitliche Kategorien usw. definieren


----------



## LukeVlbg (23. Jul 2009)

Danke war schon mal ein guter Tipp. Was ich auch noch rausnehmen musste damit es richtig angezeigt wird, war _final CategoryItemRenderer renderer = new BarRenderer();_.
Gibt es für StackedBarChart keinen Renderer oder welchen nehme ich da?

Was ich noch gerne enditieren würde wäre die dicke der Balken. Wie könnte ich das bewerkstelligen?


----------



## SlaterB (23. Jul 2009)

barRenderer.setMaximumBarWidth(%)


----------



## LukeVlbg (23. Jul 2009)

So hab ein bisschen rumgetüftelt und bin schlussendlich zur Lösung gekommen, danke.

An dieser Stelle möchte ich viellicht noch auf diesen Post hier verweisen der mir dabei geholfen hat: http://www.java-forum.org/spiele-und-multimedia-programmierung/79234-jfreechart-barplot-auf-ein-neues.html


----------

