javafx
Graphique
Recherche…
Camembert
La classe PieChart
dessine des données sous la forme d'un cercle divisé en tranches. Chaque tranche représente un pourcentage (partie) pour une valeur particulière. Les données du graphique en PieChart.Data
sont PieChart.Data
dans des objets PieChart.Data
. Chaque objet PieChart.Data
a deux champs: le nom de la tranche et sa valeur correspondante.
Constructeurs
Pour créer un graphique en secteurs, nous devons créer l'objet de la classe PieChart
. Deux constructeurs sont à notre disposition. L'un d'eux crée un graphique vide qui n'affichera rien à moins que les données ne soient définies avec la méthode setData
:
PieChart pieChart = new PieChart(); // Creates an empty pie chart
Et le second nécessite une ObservableList
de PieChart.Data
à transmettre en paramètre.
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
Les données
Les valeurs des tranches ne doivent pas nécessairement totaliser 100, car la taille de la tranche sera calculée proportionnellement à la somme de toutes les valeurs.
L'ordre dans lequel les entrées de données sont ajoutées à la liste déterminera leur position sur le graphique. Par défaut, ils sont disposés dans le sens des aiguilles d'une montre, mais ce comportement peut être inversé:
pieChart.setClockwise(false);
Exemple
L'exemple suivant crée un graphique circulaire simple:
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);
}
}
Sortie:
Graphique à secteurs interactif
Par défaut, PieChart
ne gère aucun événement, mais ce comportement peut être modifié car chaque segment est un Node
JavaFX.
Dans l'exemple ci-dessous, nous initialisons les données, nous les affectons au graphique, puis nous parcourons l'ensemble de données en ajoutant des info-bulles à chaque tranche, afin que les valeurs, normalement masquées, puissent être présentées à l'utilisateur.
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);
});
Graphique en ligne
La classe LineChart
présente les données sous la forme d'une série de points de données connectés par des lignes droites. Chaque point de données est XYChart.Data
dans XYChart.Data
objet XYChart.Data
et les points de données sont regroupés dans XYChart.Series
.
Chaque objet XYChart.Data
possède deux champs, accessibles via getXValue
et getYValue
, correspondant à une valeur x et ay sur un graphique.
XYChart.Data data = new XYChart.Data(1,3);
System.out.println(data.getXValue()); // Will print 1
System.out.println(data.getYValue()); // Will print 3
Les axes
Avant de créer un LineChart
nous devons définir ses axes. Par exemple, le constructeur par défaut sans argument d'une classe NumberAxis
créera un axe de mesure automatique prêt à l'emploi et ne nécessitant aucune configuration supplémentaire.
Axis xAxis = new NumberAxis();
Exemple
Dans l'exemple complet ci-dessous, nous créons deux séries de données qui seront affichées sur le même graphique. Les étiquettes, les plages et les valeurs de tick des axes sont explicitement définies.
@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);
}