Créer des graphiques : utilisation de jfreechart

Soyez le premier à donner votre avis sur cette source.

Vue 19 940 fois - Téléchargée 2 600 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

Messages postés
5
Date d'inscription
jeudi 7 avril 2011
Statut
Membre
Dernière intervention
29 septembre 2011

merci . j'aimerai savoir comment on s'y prend avec les courbes
Messages postés
1
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
21 octobre 2010

je voudra&is l'utiliser dans une form de visual basic, afin de l'exécuter avec des données que je les sur la form et récupérer un graphe dans cette form.
Messages postés
6
Date d'inscription
mardi 29 juin 2010
Statut
Membre
Dernière intervention
1 juillet 2010

J'ai d'ailleurs une autre question: je me suis penché sur le code, et je comprend pas comment rajouter une deuxième couleur?

L'ajout d'un "l2.add("1");" dans le main (bien placé), provoque une exception
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.RangeCheck(ArrayList.java:547)

Je ne comprend d'ailleurs pas comment (et où) est fait le lien entre une valeur et sa couleur.

Merci, et désolé du dérangement.. :/
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
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
Afficher les 8 commentaires

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.