JavaFX - Grafico a barre in pila

StackedBarChart è una variazione di un BarChart, che traccia le barre che indicano i valori dei dati per una categoria. Le barre possono essere verticali o orizzontali a seconda di quale asse è l'asse delle categorie. La barra per ogni serie è sovrapposta alla serie precedente.

Di seguito è riportato un grafico a barre in pila, che rappresenta la crescita della popolazione.

In JavaFX, un grafico a barre in pila è rappresentato da una classe denominata StackedBarChart. Questa classe appartiene al pacchettojavafx.scene.chart. Istanziando questa classe, è possibile creare un nodo StackedBarChart in JavaFX.

Passaggi per generare un grafico a barre in pila

Per generare un grafico a barre in pila in JavaFX, seguire i passaggi indicati di seguito.

Passaggio 1: creazione di una classe

Crea una classe Java ed eredita il file Application classe del pacchetto javafx.application. È quindi possibile implementare ilstart() metodo di questa classe come segue.

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

Passaggio 2: definizione dell'asse

Definisci gli assi X e Y del grafico a barre in pila e imposta le etichette su di essi. Nel nostro esempio, l'asse X rappresenta i continenti e l'asse y rappresenta la popolazione in milioni.

//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)");

Passaggio 3: creazione del grafico a barre in pila

Crea un grafico a linee istanziando la classe denominata StackedBarChart del pacchetto javafx.scene.chart. Al costruttore di questa classe, passare gli oggetti che rappresentano gli assi X e Y creati nel passaggio precedente.

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

Passaggio 4: preparazione dei dati

Istanziare il file XYChart.Series class e aggiungi i dati (una serie di coordinate xey) all'elenco osservabile di questa classe come segue:

//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));

Passaggio 5: aggiungere dati al grafico a barre in pila

Aggiungere le serie di dati preparate nel passaggio precedente al grafico a barre come segue:

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

Passaggio 6: creazione di un oggetto gruppo

Nel start() metodo, creare un oggetto gruppo istanziando la classe denominata Group. Questo appartiene al pacchettojavafx.scene.

Passare l'oggetto StackedBarChart (nodo) creato nel passaggio precedente come parametro al costruttore della classe Group. Questo dovrebbe essere fatto per aggiungerlo al gruppo come segue:

Group root = new Group(stackedBarChart);

Passaggio 7: creazione di un oggetto scena

Crea una scena istanziando la classe denominata Scene, che appartiene al pacchetto javafx.scene. A questa classe, passa l'oggetto Group (root), creato nel passaggio precedente.

Oltre all'oggetto radice, puoi anche passare due parametri doppi che rappresentano l'altezza e la larghezza dello schermo, insieme all'oggetto della classe Group come segue.

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

Passaggio 8: impostazione del titolo dello stage

Puoi impostare il titolo dello stage utilizzando il file setTitle() metodo del Stageclasse. QuestoprimaryStage è un oggetto Stage, che viene passato al metodo di avvio della classe scene come parametro.

Usando il primaryStage oggetto, imposta il titolo della scena come Sample Application come segue.

primaryStage.setTitle("Sample Application");

Passaggio 9: aggiunta di una scena allo stage

Puoi aggiungere un oggetto Scene allo stage utilizzando il metodo setScene()della classe denominata Stage. Aggiungere l'oggetto Scene preparato nei passaggi precedenti utilizzando questo metodo come segue.

primaryStage.setScene(scene);

Passaggio 10: visualizzazione dei contenuti dello stage

Visualizza il contenuto della scena utilizzando il metodo denominato show() del Stage classe come segue.

primaryStage.show();

Passaggio 11: avvio dell'applicazione

Avvia l'applicazione JavaFX chiamando il metodo statico launch() del Application class dal metodo principale come segue.

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

Esempio

La tabella seguente elenca la popolazione nei vari continenti negli anni 1800, 1900 e 2008.

Africa America Asia Europa Oceania
1800 107 31 635 203 2
1900 133 156 947 408 6
2008 973 914 4054 732 34

Di seguito è riportato un programma Java che genera un grafico a barre in pila raffigurante i dati di cui sopra, utilizzando JavaFX.

Salva questo codice in un file con il nome 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); 
   } 
}

Compilare ed eseguire il file java salvato dal prompt dei comandi utilizzando i seguenti comandi.

javac StackedBarChartExample.java 
java StackedBarChartExample

All'esecuzione, il programma precedente genera una finestra JavaFX che mostra un grafico ad area come mostrato di seguito.