Créer des graphiques : utilisation de jfreechart

Soyez le premier à donner votre avis sur cette source.

Vue 19 151 fois - Téléchargée 2 522 fois

Description

Cette source donne un exemple d'utilisation de JFreeChart pour créer un histogramme. Je n'ai codé que l'histogramme, les autres types de graphiques ont un fonctionnement similaire

Source / Exemple :


import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

public class Graphique extends JPanel {

	private static final long serialVersionUID = 1L;

	/** titre : Le titre du graphique affiché en haut */
	private String titre;
	/** ordonnee : le nom de l'axe des ordonnées */
	private String ordonnee;
	/** abscisses : le nom de l'axe des abscisses */
	private String abscisse;
	/** valeurs : les valeurs à afficher, elles sont triées par séries et par catégories*/
	private List<Float> valeurs;
	/** series : la liste des séries */
	private List<String> series;
	/** categories : la liste des categories */
	private List<String> categories;
	/** legende : booleen vrai si on affiche la légende */
	private boolean legende;
	/** couleurFond : la couleur du fond */
	private Color couleurFond;
	/** couleurBarres : les couleurs appliquées aux barres */
	private Color[] couleursBarres = {Color.cyan.darker(), 
			Color.red, Color.green, Color.cyan, Color.magenta, 
			Color.yellow, Color.pink, Color.darkGray, Color.orange};

	/**

  • Constructeur
  • @param titre : le titre du graphique
  • @param abscisse : le nom de l'axe des abscisses
  • @param ordonnee : le nom de l'axe des ordonnées
  • @param valeurs : les valeurs
  • @param fond : la couleur de fond
  • @param listeSeries : les séries
  • @param listeCategory : les catégories
  • @param legende : vrai si on affiche la légende
  • /
public Graphique(String titre, String abscisse, String ordonnee, List<Float> valeurs, Color fond, List<String> listeSeries, List<String> listeCategory, boolean legende) { super(new GridLayout(1,0)); this.titre=titre; this.ordonnee=ordonnee; this.abscisse=abscisse; this.valeurs=valeurs; this.series=listeSeries; this.categories=listeCategory; this.legende=legende; this.couleurFond=fond; initialiser(); } /**
  • Initialise le graphique
  • /
private void initialiser(){ DefaultCategoryDataset dataset = new DefaultCategoryDataset(); int k = 0; for ( int j=0; j<categories.size(); j++){ for (int i=0; i<series.size(); i++){ dataset.addValue(valeurs.get(k), series.get(i), categories.get(j)); k++; } } JFreeChart chart = ChartFactory.createBarChart( titre, // chart title abscisse, // domain axis label ordonnee, // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation legende, // include legend true, // tooltips false // URL ); // definition de la couleur de fond chart.setBackgroundPaint(couleurFond); CategoryPlot plot = (CategoryPlot) chart.getPlot(); //valeur comprise entre 0 et 1 transparence de la zone graphique plot.setBackgroundAlpha(0.9f); NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); // pour la couleur des barres pour chaque serie for (int s=0; s<series.size(); s++){ GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, couleursBarres[s], 0.0f, 0.0f, new Color(0, 40, 70)); renderer.setSeriesPaint(s, gp0); } ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setFillZoomRectangle(true); chartPanel.setMouseWheelEnabled(true); chartPanel.setPreferredSize(new Dimension(500, 270)); add(chartPanel); } /**
  • Création d'un graphique
  • @param a
  • /
public static void main(String[] a){ List<Float> donnees = new ArrayList<Float>(); List<String> l1 = new ArrayList<String>(); List<String> l2 = new ArrayList<String>(); l2.add("0"); l1.add("1"); l1.add("2"); l1.add("3"); l1.add("4"); donnees.add(2f); donnees.add(3f); donnees.add(4f); donnees.add(4f); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setBounds(10,10,500,500); Graphique g = new Graphique("titre", "x", "y", donnees, Color.white, l2, l1, true); f.add(g); f.setVisible(true); } }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248 -
Si vous voulez faire fonctionner ce code, n'oubliez pas d'importer les librairies dans le Build Path.
cs_hwoarang
Messages postés
18
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
27 juin 2008
-
Justement, je comptais jeter un coup d'oeil sur cette librairie. Merci, ca va m'aider
cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
248 -
Je suis content que ca serve à quelqu'un, si tu as des difficultés, tu peux m'envoyer un message sur le reseau
cs_mina24
Messages postés
21
Date d'inscription
mercredi 11 novembre 2009
Statut
Membre
Dernière intervention
8 février 2012
-
bonjours, votre code me sert bcp mais je ne sais pas comment modifier les valeurs de l'axe des ordonnés , je veux extraire les données à partire d'une base de donnée. Merci pour votre reponse
Zanzax
Messages postés
6
Date d'inscription
mardi 29 juin 2010
Statut
Membre
Dernière intervention
1 juillet 2010
-
Bonjour, je voudrais savoir s'il est possible de d'ajouter une étiquette sur chaque "barre" ?
J'aimerai aussi comprendre qu'est ce qu'une liste des séries, et qu'estce qu'une liste des catégories?

Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.