Open Source im professionellen Einsatz

Mit JFreechart Diagramme zeichnen

Malen nach Zahlen

Mit zunehmendem Datenwust gehen für den Betrachter relevante Informationen unter. Sinnvolle Grafiken bringen Wichtiges wieder ans Licht. Die leistungsfähige Bibliothek JFreechart hilft dabei, mit Java aussagefähige Diagramme zu zeichnen und sie in eigene Programme einzubauen.

Ob Business-Daten, Messwerte wissenschaftlicher Untersuchungen oder Zugriffe auf Server: Nichts ist langweiliger als Zahlenkolonnen. Grafiken bringen nicht nur Abwechslung, sondern heben wichtige Werte hervor. Durch die Vielfalt an Anwendungen sind die Anforderungen an entsprechende Pakete aber hoch. Standardsoftware wie Open Office bietet zumindest Unterstützung für die meistbenötigten Charts (siehe Abbildung 1). Doch wer die Daten nicht sowieso schon in einer Tabellenkalkulation hält, muss sie erst einmal in Open Office importieren, selbst wenn der benötigte Charttyp dabei ist. Da ist es oft einfacher, die Grafiken mit einem selbst geschriebenen Programm zu zeichnen.

Abbildung 1: Open Office bietet die gängigsten Diagrammtypen wie Säulen-, Balken- und Tortendiagramme.

Abbildung 1: Open Office bietet die gängigsten Diagrammtypen wie Säulen-, Balken- und Tortendiagramme.

Die Bibliothek JFreechart[1] der Firma Object-Refinery[2] bietet zwei Möglichkeiten: ein Diagramm interaktiv anfertigen oder es von Hand programmieren. JFreechart ist sehr mächtig und steht unter der LGPL. Kein Wunder also, dass sich die Bibliothek großer Beliebtheit erfreut, wie die lange Liste auf der JFreechart-Homepage beweist.

JFreechart lässt sich auch ohne Handbuch nutzen, dafür sorgen die vielen mitgelieferten Beispiele. Wer mehr Dokumentation braucht, greift zum Developer\'s Guide, der allerdings fast 40 Dollar kostet. Eine Site-Lizenz schlägt mit knapp 300 Dollar zu Buche. Das gut aufgebaute, fast 350-seitige Handbuch voller Beispiele lohnt sich aber für jeden ernsthaften Nutzer von JFreechart, da es doch sehr mühsam ist, sich alles über die Beispiele und den Quellcode zu erarbeiten. Da der Preis nicht über den eines guten Fachbuchs hinausgeht, ist er auch angemessen.

Download und Installation

Das JFreechart-Paket im Tgz-Format ist 2,3 MByte groß und umfasst den Quellcode, die fertige Jar-Datei »jfreechart-0.9.16.jar« und alle zusätzlich benötigten Bibliotheken. Am einfachsten entpackt man das Archiv etwa unter »/usr /local« mit:

tar -xzf jfreechart-0.9.16.tar.gz
 -C /usr/local


Eine weiter gehende Installation ist nicht notwendig. Es genügt, wenn sich die Jar-Bibliotheken zur Compile- und Laufzeit im »CLASSPATH« befinden. Im Falle von JFreechart sind dies die Bibliothek »jfreechart-0.9.16.jar« sowie die Bibliotheken im »lib«-Verzeichnis. Die Dokumentation ist wie oben beschrieben nicht dabei. Mittels

ant -f ant/build.xml javadoc


kann (und sollte) man sich aber die Javadoc-Dokumentation erzeugen. Sie ist eine unverzichtbare Referenz beim Programmieren und hilft dabei, sich in die Klassenstruktur einzuarbeiten.

Einen ersten Überblick über JFreechart geben die Demonstrationsprogramme, die ein Aufruf des Jar-File startet:

cd /usr/local/jfreechart-0.9.16
java -jar jfreechart-0.9.16-demo.jar


Wie in den Abbildungen 2 und 3 zu sehen, ist das Beispiel nicht durchgängig lokalisiert. Davon abgesehen verschafft es einen guten Eindruck von der Mächtigkeit des Pakets. Ein Klick mit der rechten Maustaste führt zu einem Kontextmenü. Damit lassen sich die Eigenschaften des Diagramms ändern und die Grafik als PNG-Datei speichern. Der übernächste Abschnitt zeigt, wie einfach sich solche Anwendungen mit JFreechart programmieren lassen.

Abbildung 2: Die JFreechart-Beispielanwendung zeigt die Vielfalt an Diagrammen des Pakets. Allein sechs verschiedene Balkendiagramme sind dabei.

Abbildung 2: Die JFreechart-Beispielanwendung zeigt die Vielfalt an Diagrammen des Pakets. Allein sechs verschiedene Balkendiagramme sind dabei.

Abbildung 3: Ein »XYPlot« der JFreechart-Demo stellt den Kurvenverlauf von Sinus- und Cosinusfunktionen dar.

Abbildung 3: Ein »XYPlot« der JFreechart-Demo stellt den Kurvenverlauf von Sinus- und Cosinusfunktionen dar.

Die zentrale Klasse der Bibliothek ist die Klasse »org.jfree.chart.JFreeChart«. Sie ist ein Container für Titel und Legenden sowie Objekte vom Typ »org.jfree.chart.plot.Plot« und »org.jfree.data.Dataset«. Plot ist eine abstrakte Klasse, die Subklassen wie »XYPlot« oder »PiePlot« implementieren die eigentliche Funktionalität. Dataset ist eine Schnittstelle (Interface), die von einer Vielzahl von Klassen implementiert wird. Ein Dataset besteht meist aus mehreren Datenserien, beispielsweise setzt sich »XYDataset« aus Objekten vom Typ »XYSeries« zusammen. Eine solche Datenserie umfasst einen Namen und eine Menge von Punkten ( x, y). Für Kuchendiagramme (auch Tortendiagramme oder Kreisdiagramme genannt) gibt es ein »DefaultPieDataset«, für Balkendiagramme ein »CategoryDataset« und so weiter. Hier muss der Programmierer ein geeignetes Dataset für seine Anwendung finden.

Fabrik für Diagramme

Es ist jedoch einfacher, Plot-Objekte zu verwenden. In aller Regel kommt eine statische Methode von »ChartFactory« zum Einsatz, um ein vorkonfiguriertes Diagramm zu zeichnen, das selbst aus einem Dataset erzeugt wurde:

JFreeChart chart = ChartFactory.createPieChart(...);
Plot plot = chart.getPlot();


Über das Plot-Objekt lassen sich einige Aspekte des Plots manipulieren, etwa mit der Methode »setBackgroundImage()« ein Hintergrundbild setzen.

Zwei weitere GUI-Klassen sind sehr nützlich: »ChartPanel« und »ChartFrame«. Letztere ist eine einfache Subklasse von JFrame mit einem »ChartPanel« als »ContentPane«. Ein »ChartPanel« stellt all jene Operationen zur Verfügung, die für eine interaktive Bearbeitung des Diagramms wichtig sind: drucken, speichern als PNG, zoomen, bearbeiten der Eigenschaften über ein Menü und so weiter.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook