Utiliser JFreeChart pour représenter une fonction

Actuellement sur un projet d’optimisation par algorithme génétique, j’ai décidé d’utiliser JFreeChart, un outil de création de diagramme en Java.Cet outil est gratuit mais les tutoriels exemples sont payants, rendant difficile le mimétisme de code, sauf à explorer pendant pas mal de temps stackoverflow.

Le cas d’utilisation que je donne ici est le rendu qui ressemble à celui-ci :

Résultat de l'optimisation

Résultat de l’optimisation

La fonction de base doit être dessinée en continue, puis, les points correspondant aux meilleurs résultats de l’algorithme sous forme de point.

I L’organisation de JFreeChart

Avant de pouvoir dessiner des fonctions avec JFreeChart, il faut comprendre comment un tel dessin est mis en place. Cela permet surtout de savoir dans quelle ordre il faut construire les différents objets.

diagramme UML de JFreeChart

diagramme UML de JFreeChart

Ainsi, il faut commencer par construire les “Series”. Ce sont les ensembles des couples “(t, f(t))”.

Une fois ces Series créées, il faut les ajouter dans une XYSeriesCollection qui doit contenir toutes les séries de données qu’on veut afficher sur le Plot.

Ensuite, la théorie voudrait qu’on crée un Plot puis une Chart. Heureusement, JFreeChart possède des Factory qui prennent en paramètre des XYSeriesCollection :

Le mieux est de créer un ChartPanel, qui étend de JPanel et qui surcharge certaines méthodes afin de mieux redessiner la chart.
Un clic droit sur l’image générée vous permettra de l’enregistrer sous format PNG.

Changer le rendu

Actuellement, nous avons les deux séries qui sont rendues de la même manière.
Nous, ils nous faut un rendu différent selon les séries. Dans notre cas : soit des points soit des lignes.
La configuration à changer dans notre cas, c’est celle du Renderer. Par défaut, les XYChart ont un LineRenderer. Nous, nous allons utiliser le XYLineAndShapeRenderer.

 

4 thoughts on “Utiliser JFreeChart pour représenter une fonction

  1. Encore un très bon tutoriel ! J’ai mis à peine plus de deux heures pour avoir un beau rendu ! Merci !

Leave a Reply

Your email address will not be published. Required fields are marked *