Archiv für die Kategorie ‘JFreeChart’

Diagramme mit JFreeChart

Freitag, 10. Juli 2009

Jeder wird früher oder später der Aufgabe gegenübergestellt Daten grafisch aufzubereiten: Ein Diagramm muss her um einen Erfolg oder eine Verteilung zu visualisieren. Dann sollte man einen Plan in der Tasche haben, das Diagramm effektiv zu erstellen; mein Plan heisst JFreeChart.

“Hello Chart”

Für die schnelle und einfache Erstellung von Diagrammen bietet sich die ChartFactory an. Die Klasse bietet einige häufig verwendete Diagramme zur Auswahl.
Die Factory-Methoden erwarten die rudimentären Informationen, die für ein Diagramm benötigt werden, wie z.B.:

  • Titel des Diagramms
  • Beschriftung der X- / Y-Achse
  • Diagrammdaten
  • Flag, ob eine Legende erstellt werden soll

Natürlich gibt es hier leichte Variationen, je nachdem welchen Diagrammtyp man erstellen möchte. Heraus kommt ein Chart-Objekt, das man dann weiter nutzen, verändern oder einfach nur in eine Grafik wandeln kann, um es in eine Datei zu schreiben.

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100.0, "Datenreihe", "eins");
dataset.addValue(50.0,  "Datenreihe", "zwei");
dataset.addValue(75.0,  "Datenreihe", "drei");
dataset.addValue(37.5,  "Datenreihe", "vier");
dataset.addValue(56.25, "Datenreihe", "fünf");
 
JFreeChart chart = ChartFactory.createBarChart(
		"Hello Chart", 
		"X-Achse", 
		"Y-Achse", 
		dataset, 
		PlotOrientation.VERTICAL, 
		true, 
		true, 
		true);
 
BufferedImage image = chart.createBufferedImage(300, 200);

Wie man in dem folgenden Diagramm erkennen kann, kann man mit dem vorstehenden, kurzen Code-Fragment ein ansprechendes Diagramm einfach erzeugen

linechart

Die Qual der Wahl

Wenn man sich die ChartFactory anschaut findet man dort über 30 create-Methoden; doch welche mag die Richtige für das eigene Ziel sein? Der einfachste Weg geht natürlich über das Diagramm das ich erstellen möchte:

  • Liniendiagramm
  • Balkendiagramm
  • Tortendiagramm
  • … und vieles mehr

Aber es gibt mehr als das Erscheinungsbild. Daher möchte ich hier 3 verschieden Arten von Datensätzen exemplarisch vorstellen, da die Datasets über die Verwendung und die Visualisierung im Detail entscheiden:

  • CategoryDataset: ein 2-dimensionaler Datensatz, mit beliebigen X-Werten (u.a. auch Texte). Dieser Datensatz kann gut zur Erstellung von Grafiken mit wenigen individuellen Spalten verwendet werden und findet bei vielen Diagrammen Verwendung.
  • XYDataset: ein 2-dimensionaler Datensatz mit numerischen X-Werten. Dieser Datensatz ist optimal wenn viele X-Werte genutzt werden. (Anmerkung des Authors: mein persönlicher Favorit)
  • PieDataset: ein 1-dimensionaler Datensatz zur Verwendung in Tortendiagrammen.

Kleider machen Leute

Die erstellten Diagramme müssen sich natürlich in das UI oder die CI integrieren. Daher ist es nicht nur eine Kunst eine Diagramm zu erstellen, sondern auch es gemäß den Vorgaben anzuzeigen: Schriften, Farben, Rahmenstärken, etc. Auch hier finden wir bei JFreeChart Unterstützung.

  1. 3D-Diagramm: Wenn es ein wenig extravaganter sein muss, bieten sich spezielle 3D-Diagrammtypen an. Einige sind sogar über die ChartFactory verfügbar.
  2. Themes: Man kann ein ChartTheme erzeugen, mit dem man alle Diagramme programmatisch im selben Design formatieren kann. Man sollte sich der Themes früh annehmen, um manuelle Formatierungen zu vermeiden.

Unendliche Weiten

JFreeChart kann aber mehr als nur einfache Diagramm erstellen. So sind auch Diagramme mit mehreren Datenreihen ebenso möglich wie interaktive Grafiken. Dem Interessierten sei hier die Demo (Webstart) ans Herz gelegt.

Ausnahmslos glücklich?

Ich bin sehr angetan von JFreeChart. Die Bibliothek ist sehr umfassend und lässt kaum einen Wunsch offen. Die JavaDocs sind sehr gut und helfen einem durch viele grosse und kleine Probleme. Jedoch ist es bei der Größe der Bibliothek manchmal sehr schwierig sich einen vollständigen Überblick zu verschaffen. Hier bietet das Team von JFreechart jedoch einen kostenpflichtigen Developer Guide an. Der abgeneigte Käufer wird zwar viele Beispiele zu Diagrammen und Lösungsstrategien im Internet finden, hier jedoch so manche Stunde in die Recherche stecken müssen.


Thomas Bader