Ricerca…


Grafico a torta

La classe PieChart disegna i dati sotto forma di cerchio diviso in sezioni. Ogni fetta rappresenta una percentuale (parte) per un valore particolare. I dati del grafico a torta sono PieChart.Data oggetti PieChart.Data . Ogni oggetto PieChart.Data ha due campi: il nome della fetta della torta e il suo valore corrispondente.

Costruttori

Per creare un grafico a torta, è necessario creare l'oggetto della classe PieChart . Due costruttori sono dati a nostra disposizione. Uno di questi crea un grafico vuoto che non mostrerà nulla a meno che i dati non siano impostati con il metodo setData :

PieChart pieChart = new PieChart(); // Creates an empty pie chart

E il secondo richiede una ObservableList di PieChart.Data da passare come parametro.

ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Cats", 50),
            new PieChart.Data("Dogs", 50));
PieChart pieChart(valueList); // Creates a chart with the given data

Dati

I valori delle sezioni di torta non devono necessariamente riassumere fino a 100, poiché la dimensione della fetta verrà calcolata in proporzione alla somma di tutti i valori.

L'ordine in cui le voci di dati vengono aggiunte all'elenco determinerà la loro posizione sul grafico. Di default sono posizionati in senso orario, ma questo comportamento può essere invertito:

pieChart.setClockwise(false);

Esempio

L'esempio seguente crea un grafico a torta semplice:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) {
    Pane root = new Pane();
    ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Android", 55),
            new PieChart.Data("IOS", 33),
            new PieChart.Data("Windows", 12));
    // create a pieChart with valueList data.
    PieChart pieChart = new PieChart(valueList);
    pieChart.setTitle("Popularity of Mobile OS");
    //adding pieChart to the root.
    root.getChildren().addAll(pieChart);
    Scene scene = new Scene(root, 450, 450);

    primaryStage.setTitle("Pie Chart Demo");
    primaryStage.setScene(scene);
    primaryStage.show();
}

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

Produzione:

Risultato

Grafico a torta interattivo

Per impostazione predefinita, PieChart non gestisce alcun evento, ma questo comportamento può essere modificato poiché ogni slice di torta è un Node JavaFX.

Nell'esempio seguente inizializziamo i dati, li assegniamo al grafico, quindi eseguiamo l'iterazione sul set di dati aggiungendo suggerimenti a ogni sezione, in modo che i valori, normalmente nascosti, possano essere presentati all'utente.

ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Nitrogen", 7809),
            new PieChart.Data("Oxygen", 2195),
            new PieChart.Data("Other", 93));
    
PieChart pieChart = new PieChart(valueList);
pieChart.setTitle("Air composition");

pieChart.getData().forEach(data -> {
    String percentage = String.format("%.2f%%", (data.getPieValue() / 100));
    Tooltip toolTip = new Tooltip(percentage);
    Tooltip.install(data.getNode(), toolTip);
});

Grafico a linee

La classe LineChart presenta i dati come una serie di punti dati collegati con linee rette. Ciascun punto di dati è racchiuso nell'oggetto XYChart.Data e i punti di dati sono raggruppati in XYChart.Series .

Ogni oggetto XYChart.Data ha due campi, a cui è possibile accedere utilizzando getXValue e getYValue , che corrispondono a un valore x e ay su un grafico.

XYChart.Data data = new XYChart.Data(1,3);
System.out.println(data.getXValue()); // Will print 1
System.out.println(data.getYValue()); // Will print 3

assi

Prima di creare un LineChart dobbiamo definire i suoi assi. Ad esempio, il costruttore predefinito senza argomenti di una classe NumberAxis creerà un asse auto-ranging che è pronto per l'uso e non richiede ulteriori configurazioni.

Axis xAxis = new NumberAxis();

Esempio

Nell'esempio completo di seguito creiamo due serie di dati che verranno visualizzati sullo stesso grafico. Le etichette, gli intervalli e i valori di tick dell'asse sono esplicitamente definiti.

@Override
public void start(Stage primaryStage) {
    Pane root = new Pane();

    // Create empty series
    ObservableList<XYChart.Series> seriesList = FXCollections.observableArrayList();

    // Create data set for the first employee and add it to the series
    ObservableList<XYChart.Data> aList = FXCollections.observableArrayList(
            new XYChart.Data(0, 0),
            new XYChart.Data(2, 6),
            new XYChart.Data(4, 37),
            new XYChart.Data(6, 82),
            new XYChart.Data(8, 115)
    );
    seriesList.add(new XYChart.Series("Employee A", aList));

    // Create data set for the second employee and add it to the series
    ObservableList<XYChart.Data> bList = FXCollections.observableArrayList(
            new XYChart.Data(0, 0),
            new XYChart.Data(2, 43),
            new XYChart.Data(4, 51),
            new XYChart.Data(6, 64),
            new XYChart.Data(8, 92)
    );
    seriesList.add(new XYChart.Series("Employee B", bList));

    // Create axes
    Axis xAxis = new NumberAxis("Hours worked", 0, 8, 1);
    Axis yAxis = new NumberAxis("Lines written", 0, 150, 10);
    
    LineChart chart = new LineChart(xAxis, yAxis, seriesList);

    root.getChildren().add(chart);

    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();
}

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

Produzione:

Grafico a linee



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow