javafx
Grafico
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:
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);
}