JFreeChart Anleitung


Die Bibliothek "JFreeChart" kann unter http://sourceforge.net/projects/jfreechart/files/ heruntergeladen werden.

Dieses "Schritt für Schritt"-Tutorial soll erläutern, wie man mit ein paar einfachen Anweisungen seine Daten mithilfe der "JFreeChart"-Bibliothek plotten kann. Dazu gehen wir in 3 Schritten vor:

Schritt 1: Bereitstellen der Daten

Schritt 2: Erstellen des Plots

Schritt 3: Anlegen der Zeichenebene

Schritt 4: Ausgaben



Schritt 1: Bereitstellen der Daten

Die zu plottenden Daten muessen in Form eines Datasets bereit liegen. Hier werden 2 Möglichkeiten gezeigt, wie man das realisieren kann.
Für diese Methode wird der Import der folgenden Bibliothek benötigt.
import org.jfree.data.xy.*;

Möglichkeit 1 mit DefaultXYDataset

Mit dieser Methode kann aus einer beliebigen zweispaltigen Matrix (wobei die erste Spalte die x Werte und die zweite die y Werte enthält) ein Dataset gewonnen werden. In diesem Beispiel heißt die Matrix A.


double [][] A = {{1,2,5},{3,4,0}};

DefaultXYDataset dataset = new DefaultXYDataset();
dataset.addSeries("xy", A);    // A wird unter dem Namen xy abgespeichert

Möglichkeit 2 mit XYSeriesCollection

Mit dieser Methode kann man einzelne Punkte in der Form (x,y) zu einem Dataset hinzufuegen. Dabei kann man sie innerhalb des Objekts zu XYSeries gruppieren, hier realisiert durch zwei XYSeries 'series1' und 'series2'.

// series2 enthaelt Punkte, die verbunden werden
XYSeries series1 = new XYSeries("Punkte1");
series1.add(0, 0);
series1.add(1, 1);
series1.add(2, 1);
series1.add(3, 2);

XYSeries series2 = new XYSeries("Punkte2");
series2.add(1, 2);
series2.add(2, 3);
series2.add(3, 4);


// Hinzufuegen von series1 und series2 zu der Datenmenge dataset
XYSeriesCollection dataset2 = 
new XYSeriesCollection();
dataset2.addSeries(series1);
dataset2.addSeries(series2);


Schritt 2: Erstellen des Plots mit XYPlot

Zum Erstellen eines Plot brauchen wir zunächst einen Renderer, der darüber entscheidet, in welcher Form unsere Daten geplottet werden sollen. Hier werden die Klassen XYDotRenderer, XYSplineRenderer und XYLineAndShapeRenderer vorgestellt. Ersterer ist zum Plotten von einzelnen Punkten, zweiterer zum Verbinden der Punkte mittels Splines und letzterer zum einfachen Verbinden der Punkte durch Linien. Je nachdem muss eine der folgenden Bibliotheken importiert werden:

import org.jfree.chart.renderer.xy.XYDotRenderer;

oder

import org.jfree.chart.renderer.xy.XYSplineRenderer;

oder

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

Wir werden nun beispielhaft einen Plot mit dem XYDotRenderer erstellen. Zum Erzeugen des Rendereres verwendet man folgenden Befehl:

XYDotRenderer dot = new XYDotRenderer();

Um die Punkte besser sichtbar zu machen, kann man sie mit folgenden Befehlen vergrößern:

dot.setDotHeight(5);
dot.setDotWidth(5);

Nun benötigen wir Objekte der Klasse ValueAxis, welche die Beschriftung der Achsen festlegen. Beispielhaft ist hier NumberAxis gewählt, es kann natürlich auch eine beliebige andere Klasse gewählt werden.

NumberAxis xax = new NumberAxis("x");
NumberAxis yax = new NumberAxis("y");

Jetzt haben wir alle Eingabeparameter um ein Objekt der Klasse XYPlot zu erstellen:
XYPlot plot = new XYPlot(dataset2,xax,yax, dot);

Weiterhin brauchen wir ein Objekt der Klasse JFreeChart:

JFreeChart chart2 = new JFreeChart(plot);

Hinweis

1.Bei der Erstellung eines Balkendiagramms benutzt man die Methode createBarChart der Klasse JFreeChart.
2.Bei der Erstellung eines Tortendiagramms benutzt man die Methode createPieChart der Klasse JFreeChart.
Die vollständigen Beispielcodes für diese Plotarten sind in Beispielen angegeben.

Schritt 3: Anlegen der Zeichenebene

Nun müssen wir unsere Graphiken in einem Ausgabefenster zeichnen. Dafür erzeugen wir Objekte der Klassen ApplicationFrame und ChartPanel. Mit zahlreichen Methoden letzterer Klasse können wir mehrere Parameter festlegen, z.B. die Größe des Fensters. setContentPane setzt den Inhalt des Plots in ein übergeordnetes Fenster. pack sichert, dass das Ausgabefenster an die angegebenen Parameter angepasst ist.

// Erstellen eines Ausgabefensters
ApplicationFrame punkteframe = new ApplicationFrame("Punkte"); //"Punkte" entspricht der Ueberschrift des Fensters

ChartPanel chartPanel2 = new ChartPanel(chart2);
punkteframe.setContentPane(chartPanel2);
punkteframe.pack();
punkteframe.setVisible(true);

Man kann zur Ausgabe genauso die Klasse ChartFrame und ihre Methoden benutzen.

Leicht modifizierter Quellcode des obigen Beispiels ist hier zu finden: Demo_JFreeChart.java, Dataset.java

Schritt 4: Ausgaben

Mit oben beschriebenen Codezeilen lassen sich folgende Ausgaben erzeugen:
Der XYDotRenderer erzeugt folgende Ausgabe:
XYDotRenderer_Ausgabe

Der XYSplineRenderer erzeugt folgende Ausgabe:

Spline_Ausgabe

Der XYLineAndShapeRenderer erzeugt folgende Ausgabe:

XYLineandShape_Ausgabe


Weitere Beispiele

BarChart

BarChart ist ein Balkendiagramm.

   Diese Ausgabe wird durch diesen Code produziert.


PieChart

PieChart ist ein Tortendiagramm.

   Diese Ausgabe wird durch diesen Code produziert.