JavaFX - Graphique à barres empilées

StackedBarChart est une variante d'un BarChart, qui trace des barres indiquant les valeurs de données pour une catégorie. Les barres peuvent être verticales ou horizontales en fonction de l'axe des catégories. La barre de chaque série est empilée au-dessus de la série précédente.

Ce qui suit est un graphique à barres empilées, qui illustre la croissance démographique.

Dans JavaFX, un histogramme empilé est représenté par une classe nommée StackedBarChart. Cette classe appartient au packagejavafx.scene.chart. En instanciant cette classe, vous pouvez créer un nœud StackedBarChart dans JavaFX.

Étapes pour générer un graphique à barres empilées

Pour générer un diagramme à barres empilées dans JavaFX, suivez les étapes ci-dessous.

Étape 1: Créer une classe

Créez une classe Java et héritez du Application classe du package javafx.application. Vous pouvez ensuite implémenter lestart() méthode de cette classe comme suit.

public class ClassName extends Application { 
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   }    
}

Étape 2: Définition de l'axe

Définissez les axes X et Y du graphique à barres empilées et attribuez-leur des étiquettes. Dans notre exemple, l'axe X représente les continents et l'axe y représente la population en millions.

//Defining the x axis               
CategoryAxis xAxis = new CategoryAxis();    

xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList
   ("Africa", "America", "Asia", "Europe", "Oceania"))); 
xAxis.setLabel("category");  

//Defining the y axis 
NumberAxis yAxis = new NumberAxis(); 
yAxis.setLabel("Population (In millions)");

Étape 3: Création du graphique à barres empilées

Créez un graphique en courbes en instanciant la classe nommée StackedBarChart du forfait javafx.scene.chart. Au constructeur de cette classe, transmettez les objets représentant les axes X et Y créés à l'étape précédente.

//Creating the Bar chart 
StackedBarChart<String, Number> stackedBarChart = 
new StackedBarChart<>(xAxis, yAxis);         
stackedBarChart.setTitle("Historic World Population by Region");

Étape 4: préparation des données

Instancier le XYChart.Series classe et ajoutez les données (une série de coordonnées x et y) à la liste Observable de cette classe comme suit -

//Prepare XYChart.Series objects by setting data 
XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
series1.setName("1800"); 
series1.getData().add(new XYChart.Data<>("Africa", 107)); 
series1.getData().add(new XYChart.Data<>("America", 31)); 
series1.getData().add(new XYChart.Data<>("Asia", 635)); 
series1.getData().add(new XYChart.Data<>("Europe", 203)); 
series1.getData().add(new XYChart.Data<>("Oceania", 2)); 
XYChart.Series<String, Number> series2 = new XYChart.Series<>();  

series2.setName("1900"); 
series2.getData().add(new XYChart.Data<>("Africa", 133)); 
series2.getData().add(new XYChart.Data<>("America", 156)); 
series2.getData().add(new XYChart.Data<>("Asia", 947)); 
series2.getData().add(new XYChart.Data<>("Europe", 408)); 
series1.getData().add(new XYChart.Data<>("Oceania", 6));  

XYChart.Series<String, Number> series3 = new XYChart.Series<>(); 
series3.setName("2008"); 
series3.getData().add(new XYChart.Data<>("Africa", 973)); 
series3.getData().add(new XYChart.Data<>("America", 914)); 
series3.getData().add(new XYChart.Data<>("Asia", 4054)); 
series3.getData().add(new XYChart.Data<>("Europe", 732)); 
series1.getData().add(new XYChart.Data<>("Oceania", 34));

Étape 5: Ajouter des données au graphique à barres empilées

Ajoutez la série de données préparée à l'étape précédente au graphique à barres comme suit -

//Setting the data to bar chart        
stackedBarChart.getData().addAll(series1, series2, series3);

Étape 6: Création d'un objet de groupe

dans le start() , créez un objet de groupe en instanciant la classe nommée Group. Cela appartient au packagejavafx.scene.

Passez l'objet StackedBarChart (node) créé à l'étape précédente en tant que paramètre au constructeur de la classe Group. Cela devrait être fait afin de l'ajouter au groupe comme suit -

Group root = new Group(stackedBarChart);

Étape 7: Création d'un objet de scène

Créez une scène en instanciant la classe nommée Scene, qui appartient au package javafx.scene. À cette classe, transmettez l'objet Group (racine), créé à l'étape précédente.

En plus de l'objet racine, vous pouvez également transmettre deux doubles paramètres représentant la hauteur et la largeur de l'écran, ainsi que l'objet de la classe Group comme suit.

Scene scene = new Scene(group ,600, 300);

Étape 8: Définition du titre de la scène

Vous pouvez définir le titre de la scène à l'aide du setTitle() méthode de la Stageclasse. CeprimaryStage est un objet Stage, qui est passé à la méthode start de la classe Scene en tant que paramètre.

En utilisant le primaryStage objet, définissez le titre de la scène comme Sample Application comme suit.

primaryStage.setTitle("Sample Application");

Étape 9: Ajouter une scène à la scène

Vous pouvez ajouter un objet Scene à la scène en utilisant la méthode setScene()de la classe nommée Stage. Ajoutez l'objet Scene préparé aux étapes précédentes à l'aide de cette méthode comme suit.

primaryStage.setScene(scene);

Étape 10: Affichage du contenu de la scène

Affichez le contenu de la scène en utilisant la méthode nommée show() du Stage classe comme suit.

primaryStage.show();

Étape 11: Lancement de l'application

Lancez l'application JavaFX en appelant la méthode statique launch() du Application classe de la méthode principale comme suit.

public static void main(String args[]){   
   launch(args);      
}

Exemple

Le tableau suivant répertorie la population des différents continents au cours des années 1800, 1900 et 2008.

Afrique Amérique Asie L'Europe  Océanie
1800 107 31 635 203 2
1900 133 156 947 408 6
2008 973 914 4054 732 34

Voici un programme Java qui génère un graphique à barres empilées représentant les données ci-dessus, à l'aide de JavaFX.

Enregistrez ce code dans un fichier avec le nom StackedBarChartExample.java.

import java.util.Arrays; 
import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.chart.CategoryAxis; 
import javafx.stage.Stage; 
import javafx.scene.chart.NumberAxis; 
import javafx.scene.chart.StackedBarChart; 
import javafx.scene.chart.XYChart; 
         
public class StackedBarChartExample extends Application { 
   @Override 
   public void start(Stage stage) {     
      //Defining the axes               
      CategoryAxis xAxis = new CategoryAxis();    
      xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList
         ("Africa", "America", "Asia", "Europe", "Oceania"))); 
      
      xAxis.setLabel("category");
      NumberAxis yAxis = new NumberAxis(); 
      yAxis.setLabel("Population (In millions)");    
         
      //Creating the Bar chart 
      StackedBarChart<String, Number> stackedBarChart = 
         new StackedBarChart<>(xAxis, yAxis);         
      stackedBarChart.setTitle("Historic World Population by Region"); 
         
      //Prepare XYChart.Series objects by setting data 
      XYChart.Series<String, Number> series1 = new XYChart.Series<>();  
      series1.setName("1800"); 
      series1.getData().add(new XYChart.Data<>("Africa", 107)); 
      series1.getData().add(new XYChart.Data<>("America", 31));  
      series1.getData().add(new XYChart.Data<>("Asia", 635)); 
      series1.getData().add(new XYChart.Data<>("Europe", 203)); 
      series1.getData().add(new XYChart.Data<>("Oceania", 2)); 
         
      XYChart.Series<String, Number> series2 = new XYChart.Series<>(); 
      series2.setName("1900"); 
      series2.getData().add(new XYChart.Data<>("Africa", 133)); 
      series2.getData().add(new XYChart.Data<>("America", 156)); 
      series2.getData().add(new XYChart.Data<>("Asia", 947)); 
      series2.getData().add(new XYChart.Data<>("Europe", 408)); 
      series1.getData().add(new XYChart.Data<>("Oceania", 6));  
     
      XYChart.Series<String, Number> series3 = new XYChart.Series<>(); 
      series3.setName("2008"); 
      series3.getData().add(new XYChart.Data<>("Africa", 973)); 
      series3.getData().add(new XYChart.Data<>("America", 914)); 
      series3.getData().add(new XYChart.Data<>("Asia", 4054)); 
      series3.getData().add(new XYChart.Data<>("Europe", 732)); 
      series1.getData().add(new XYChart.Data<>("Oceania", 34)); 
         
      //Setting the data to bar chart
      stackedBarChart.getData().addAll(series1, series2, series3); 
         
      //Creating a Group object  
      Group root = new Group(stackedBarChart); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 400);  
      
      //Setting title to the Stage 
      stage.setTitle("stackedBarChart"); 
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show();         
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.

javac StackedBarChartExample.java 
java StackedBarChartExample

Lors de l'exécution, le programme ci-dessus génère une fenêtre JavaFX affichant un graphique en aires comme indiqué ci-dessous.