JavaFX - Gráfico de Barras Empilhadas
StackedBarChart é uma variação de um BarChart, que plota barras indicando valores de dados para uma categoria. As barras podem ser verticais ou horizontais, dependendo de qual eixo é o eixo da categoria. A barra de cada série é empilhada em cima da série anterior.
A seguir está um gráfico de barras empilhadas, que mostra o crescimento da população.
No JavaFX, um gráfico de barras empilhadas é representado por uma classe chamada StackedBarChart. Esta classe pertence ao pacotejavafx.scene.chart. Ao instanciar essa classe, você pode criar um nó StackedBarChart no JavaFX.
Etapas para gerar gráfico de barras empilhadas
Para gerar um gráfico de barras empilhadas no JavaFX, siga as etapas fornecidas a seguir.
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 empilhadas e defina rótulos para eles. Em nosso exemplo, o eixo X representa os continentes e o eixo y representa a população em milhões.
//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)");
Etapa 3: Criação do gráfico de barras empilhadas
Crie um gráfico de linha instanciando a classe chamada StackedBarChart 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
StackedBarChart<String, Number> stackedBarChart =
new StackedBarChart<>(xAxis, yAxis);
stackedBarChart.setTitle("Historic World Population by Region");
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("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));
Etapa 5: adicionar dados ao gráfico de barras empilhadas
Adicione a série de dados preparada na etapa anterior ao gráfico de barras da seguinte forma -
//Setting the data to bar chart
stackedBarChart.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 Group. Isso pertence ao pacotejavafx.scene.
Passe o objeto StackedBarChart (nó) criado na etapa anterior como um parâmetro para o construtor da classe Group. Isso deve ser feito para adicioná-lo ao grupo da seguinte forma -
Group root = new Group(stackedBarChart);
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 (raiz), 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. esteprimaryStage é 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 este método como segue.
primaryStage.setScene(scene);
Etapa 10: Exibindo o conteúdo do palco
Exibir 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
A tabela a seguir lista a população em vários continentes nos anos 1800, 1900 e 2008.
África | América | Ásia | Europa | Oceânia | |
---|---|---|---|---|---|
1800 | 107 | 31 | 635 | 203 | 2 |
1900 | 133 | 156 | 947 | 408 | 6 |
2008 | 973 | 914 | 4054 | 732 | 34 |
A seguir está um programa Java que gera um gráfico de barras empilhadas que descreve os dados acima, usando JavaFX.
Salve este código em um arquivo com o 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);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
javac StackedBarChartExample.java
java StackedBarChartExample
Ao ser executado, o programa acima gera uma janela JavaFX exibindo um gráfico de área conforme mostrado abaixo.