JavaFX - Gráfico de Barras

Um gráfico de barras é usado para representar dados agrupados usando barras retangulares. O comprimento dessas barras representa os valores. As barras no gráfico de barras podem ser plotadas vertical ou horizontalmente.

A seguir está um gráfico de barras, comparando várias marcas de automóveis.

No JavaFX, um gráfico de barras é representado por uma classe chamada BarChart. Esta classe pertence ao pacotejavafx.scene.chart. Ao instanciar essa classe, você pode criar um nó BarChart no JavaFX.

Etapas para gerar gráfico de barras

Para gerar um gráfico de barras em JavaFX, siga as etapas fornecidas abaixo.

Etapa 1: Criação de uma classe

Crie uma classe Java e herde o Application classe do pacote javafx.application. Você pode então implementar ostart() método desta classe da seguinte forma.

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

Etapa 2: Definindo o eixo

Defina os eixos X e Y do gráfico de barras e defina rótulos para eles. Em nosso exemplo, o eixo X representa a categoria de comparação e o eixo y representa a pontuação.

//Defining the x axis               
CategoryAxis xAxis = new CategoryAxis();   
        
xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(
   "Speed", "User rating", "Milage", "Safety"))); 
xAxis.setLabel("category");  

//Defining the y axis 
NumberAxis yAxis = new NumberAxis(); 
yAxis.setLabel("score");

Etapa 3: Criação do gráfico de barras

Crie um gráfico de linha instanciando a classe chamada BarChart do pacote javafx.scene.chart. Para o construtor desta classe, passe os objetos que representam os eixos X e Y criados na etapa anterior.

//Creating the Bar chart 
BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis);  
barChart.setTitle("Comparison between various cars");

Etapa 4: preparando os dados

Instancie o XYChart.Series classe e adicione os dados (uma série de coordenadas xey) à lista Observável desta classe da seguinte forma -

//Prepare XYChart.Series objects by setting data        
XYChart.Series<String, Number> series1 = new XYChart.Series<>(); 
series1.setName("Fiat"); 
series1.getData().add(new XYChart.Data<>("Speed", 1.0)); 
series1.getData().add(new XYChart.Data<>("User rating", 3.0)); 
series1.getData().add(new XYChart.Data<>("Milage", 5.0)); 
series1.getData().add(new XYChart.Data<>("Safety", 5.0));   

XYChart.Series<String, Number> series2 = new XYChart.Series<>(); 
series2.setName("Audi"); 
series2.getData().add(new XYChart.Data<>("Speed", 5.0)); 
series2.getData().add(new XYChart.Data<>("User rating", 6.0));  

series2.getData().add(new XYChart.Data<>("Milage", 10.0)); 
series2.getData().add(new XYChart.Data<>("Safety", 4.0));  

XYChart.Series<String, Number> series3 = new XYChart.Series<>(); 
series3.setName("Ford"); 
series3.getData().add(new XYChart.Data<>("Speed", 4.0)); 
series3.getData().add(new XYChart.Data<>("User rating", 2.0)); 
series3.getData().add(new XYChart.Data<>("Milage", 3.0)); 
series3.getData().add(new XYChart.Data<>("Safety", 6.0));

Etapa 5: adicionar dados ao gráfico de barras

Adicione a série de dados preparada na etapa anterior ao gráfico de barras da seguinte forma -

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

Etapa 6: Criação de um objeto de grupo

No start()método, crie um objeto de grupo instanciando a classe chamada Grupo. Isso pertence ao pacotejavafx.scene.

Passe o objeto BarChart (nó), criado na etapa anterior como parâmetro para o construtor da classe Group. Isso deve ser feito para adicioná-lo ao grupo da seguinte forma -

Group root = new Group(barChart);

Etapa 7: Criação de um objeto de cena

Crie uma cena instanciando a classe chamada Scene, que pertence ao pacote javafx.scene. Para esta classe, passe o objeto Grupo (root) criado na etapa anterior.

Além do objeto raiz, você também pode passar dois parâmetros duplos que representam a altura e a largura da tela, junto com o objeto da classe Grupo da seguinte maneira.

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

Etapa 8: Definir o título do palco

Você pode definir o título do palco usando o setTitle() método do Stageclasse. oprimaryStage é um objeto Stage, que é passado para o método start da classe Scene como um parâmetro.

Usando o primaryStage objeto, defina o título da cena como Sample Application do seguinte modo.

primaryStage.setTitle("Sample Application");

Etapa 9: Adicionando cena ao palco

Você pode adicionar um objeto Scene ao palco usando o método setScene() da classe chamada Stage. Adicione o objeto Scene preparado nas etapas anteriores usando o método a seguir.

primaryStage.setScene(scene);

Etapa 10: Exibindo o conteúdo do palco

Mostra o conteúdo da cena usando o método chamado show() do Stage classe da seguinte forma.

primaryStage.show();

Etapa 11: iniciar o aplicativo

Inicie o aplicativo JavaFX chamando o método estático launch() do Application classe do método principal da seguinte forma.

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

Exemplo

O exemplo a seguir descreve várias estatísticas do carro com a ajuda de um gráfico de barras. A seguir está uma lista de marcas de automóveis com suas diferentes características, que mostraremos em um gráfico de barras -

Carro Rapidez Avaliação do utilizador Millage Segurança
Fiat 1.0 3,0 5.0 5.0
Audi 5.0 6,0 10,0 4,0
Ford 4,0 2.0 3,0 6,0

A seguir está um programa Java que gera um gráfico de barras, descrevendo os dados acima usando JavaFX.

Salve este código em um arquivo com o nome BarChartExample.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.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
        
public class BarChartExample extends Application {
   @Override
   public void start(Stage stage) {    
      //Defining the axes              
      CategoryAxis xAxis = new CategoryAxis();  
      xAxis.setCategories(FXCollections.<String>
      observableArrayList(Arrays.asList("Speed", "User rating", "Milage", "Safety")));
      xAxis.setLabel("category");
       
      NumberAxis yAxis = new NumberAxis();
      yAxis.setLabel("score");
     
      //Creating the Bar chart
      BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis); 
      barChart.setTitle("Comparison between various cars");
        
      //Prepare XYChart.Series objects by setting data       
      XYChart.Series<String, Number> series1 = new XYChart.Series<>();
      series1.setName("Fiat");
      series1.getData().add(new XYChart.Data<>("Speed", 1.0));
      series1.getData().add(new XYChart.Data<>("User rating", 3.0));
      series1.getData().add(new XYChart.Data<>("Milage", 5.0));
      series1.getData().add(new XYChart.Data<>("Safety", 5.0));
        
      XYChart.Series<String, Number> series2 = new XYChart.Series<>();
      series2.setName("Audi");
      series2.getData().add(new XYChart.Data<>("Speed", 5.0));
      series2.getData().add(new XYChart.Data<>("User rating", 6.0));
      series2.getData().add(new XYChart.Data<>("Milage", 10.0));
      series2.getData().add(new XYChart.Data<>("Safety", 4.0));

      XYChart.Series<String, Number> series3 = new XYChart.Series<>();
      series3.setName("Ford");
      series3.getData().add(new XYChart.Data<>("Speed", 4.0));
      series3.getData().add(new XYChart.Data<>("User rating", 2.0));
      series3.getData().add(new XYChart.Data<>("Milage", 3.0));
      series3.getData().add(new XYChart.Data<>("Safety", 6.0));
              
      //Setting the data to bar chart       
      barChart.getData().addAll(series1, series2, series3);
        
      //Creating a Group object 
      Group root = new Group(barChart);
        
      //Creating a scene object
      Scene scene = new Scene(root, 600, 400);

      //Setting title to the Stage
      stage.setTitle("Bar Chart");
        
      //Adding scene to the stage
      stage.setScene(scene);
        
      //Displaying the contents of the stage
      stage.show();        
   }
   public static void main(String args[]){
      launch(args);
   }
}

Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.

javac BarChartExample.java 
java BarChartExample

Ao ser executado, o programa acima gera uma janela JavaFX exibindo um gráfico de área conforme mostrado abaixo.