Hey,
ich stehe aktuell vor dem Problem, dass ich ein Diagramm erstellen will, welches in der Lage ist verschiedene TimeSeries in Abschnitten wiederzugeben. Bisher habe ich dafür auf einen modifizierten GanttChart zurückgegriffen. Dadurch lies sich folgendes Diagramm bereits erzeugen.
Allerdings war ich nicht in der Lage die verschiedenen Series auf eine Linie zu positionieren, da der (ich glaube es ist der Renderer) Renderer mir einen Strich durch die Rechnung macht und für jede Series eine eigene horizontale Reihe einführt.
Also dachte ich mir, naja mach ich halt ein StackedBarChart. Das Problem ist nur, dass dort sowie ich eine Series wiederholt nutze, mir (und das vermute ich ebenfalls nur) der DefaultCategoryDataset einen Strich durch die Rechnung macht und einfach lediglich den letzte Wert ausgibt und alle vorherigen Werte überschreibt(In meinem Beispiel wird der Wert 10 ignoriert und für Series 2 lediglich der Wert 1 angezeigt).
Das Ergebnis ziegt sich in folgendem Bild:
Ich vermute, dass ich mir einen eigenen DefaultCategoryDataset schreiben muss, aber ich bin mir auch nicht sicher ob vielleicht der Renderer an allem Schuld ist. Hat jemand damit schonmal Erfahrung gemacht? Beim googlen bin ich bereits mehrfach auf die Fragestellung gestoßen aber diese wurde noch nicht beantwortet.
ich stehe aktuell vor dem Problem, dass ich ein Diagramm erstellen will, welches in der Lage ist verschiedene TimeSeries in Abschnitten wiederzugeben. Bisher habe ich dafür auf einen modifizierten GanttChart zurückgegriffen. Dadurch lies sich folgendes Diagramm bereits erzeugen.
Allerdings war ich nicht in der Lage die verschiedenen Series auf eine Linie zu positionieren, da der (ich glaube es ist der Renderer) Renderer mir einen Strich durch die Rechnung macht und für jede Series eine eigene horizontale Reihe einführt.
Also dachte ich mir, naja mach ich halt ein StackedBarChart. Das Problem ist nur, dass dort sowie ich eine Series wiederholt nutze, mir (und das vermute ich ebenfalls nur) der DefaultCategoryDataset einen Strich durch die Rechnung macht und einfach lediglich den letzte Wert ausgibt und alle vorherigen Werte überschreibt(In meinem Beispiel wird der Wert 10 ignoriert und für Series 2 lediglich der Wert 1 angezeigt).
Das Ergebnis ziegt sich in folgendem Bild:
Ich vermute, dass ich mir einen eigenen DefaultCategoryDataset schreiben muss, aber ich bin mir auch nicht sicher ob vielleicht der Renderer an allem Schuld ist. Hat jemand damit schonmal Erfahrung gemacht? Beim googlen bin ich bereits mehrfach auf die Fragestellung gestoßen aber diese wurde noch nicht beantwortet.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.util.LinkedList;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.statistics.DefaultMultiValueCategoryDataset;
import org.jfree.data.time.*;
import org.jfree.ui.ApplicationFrame;
/**
*
* @author Christoph
*/
public class Arbeitsraumplan extends ApplicationFrame {
//Attribute der Klasse Arbeitsraumplan
//Konstruktor der Klasse Arbeitsraumplan
//private static final long serialVersionUID = 1L;
public Arbeitsraumplan(String s)
{
super(s);
JPanel jpanel = createArbeitsraumPanel();
jpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(jpanel);
}
private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createStackedBarChart("Arbeitsraumplan", "Arbeitsräume", "X-Achse",
categorydataset, PlotOrientation.HORIZONTAL, true, false, false);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.lightGray);
categoryplot.setRangeGridlinePaint(Color.white);
StackedBarRenderer stackedbarrenderer = (StackedBarRenderer)categoryplot.getRenderer();
stackedbarrenderer.setDrawBarOutline(false);
//long l = System.currentTimeMillis();
stackedbarrenderer.setBase(0);
NumberAxis numberaxis = new NumberAxis("Zeit");
categoryplot.setRangeAxis(numberaxis);
return jfreechart;
}
public static JPanel createArbeitsraumPanel()
{
JFreeChart jfreechart = createChart(createDataset());
return new ChartPanel(jfreechart);
}
private static CategoryDataset createDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
//long l = 0x5265c00L;
defaultcategorydataset.addValue(2, "Series 1", "Category 1");
defaultcategorydataset.addValue(10, "Series 2", "Category 1");
defaultcategorydataset.addValue(2, "Series 3", "Category 1");
defaultcategorydataset.addValue(1, "Series 2", "Category 1");
defaultcategorydataset.addValue(4, "Series 1", "Category 2");
defaultcategorydataset.addValue(5, "Series 2", "Category 2");
defaultcategorydataset.addValue(1, "Series 3", "Category 2");
return defaultcategorydataset;
}
}