javafx
Wykres
Szukaj…
Wykres kołowy
Klasa PieChart
rysuje dane w postaci koła podzielonego na plasterki. Każdy plasterek reprezentuje procent (część) dla określonej wartości. Dane wykresu kołowego są pakowane w obiekty PieChart.Data
. Każdy obiekt PieChart.Data
ma dwa pola: nazwę wycinka kołowego i odpowiadającą mu wartość.
Konstruktory
Aby utworzyć wykres kołowy, musimy utworzyć obiekt klasy PieChart
. Do naszej dyspozycji oddano dwóch konstruktorów. Jeden z nich tworzy pusty wykres, który niczego nie wyświetli, chyba że dane zostaną ustawione metodą setData
:
PieChart pieChart = new PieChart(); // Creates an empty pie chart
A drugi wymaga podania ObservableList
z PieChart.Data
jako parametru.
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
Dane
Wartości wycinków nie muszą sumować się do 100, ponieważ rozmiar wycinka zostanie obliczony proporcjonalnie do sumy wszystkich wartości.
Kolejność dodawania wpisów danych do listy określi ich pozycję na wykresie. Domyślnie są one układane zgodnie z ruchem wskazówek zegara, ale to zachowanie można odwrócić:
pieChart.setClockwise(false);
Przykład
Poniższy przykład tworzy prosty wykres kołowy:
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);
}
}
Wynik:
Interaktywny wykres kołowy
Domyślnie PieChart
nie obsługuje żadnych wydarzeń, ale to zachowanie może być zmienione, ponieważ każdy kawałek pie jest JavaFX Node
.
W poniższym przykładzie inicjalizujemy dane, przypisujemy je do wykresu, a następnie iterujemy zestaw danych, dodając podpowiedzi do każdego wycinka, aby wartości, które zwykle są ukryte, mogły zostać przedstawione użytkownikowi.
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);
});
Wykres liniowy
Klasa LineChart
przedstawia dane jako serię punktów danych połączonych liniami prostymi. Każdy punkt danych jest zawinięty w obiekcie XYChart.Data
, a punkty danych są zgrupowane w XYChart.Series
.
Każdy obiekt XYChart.Data
ma dwa pola, do których można uzyskać dostęp za pomocą getXValue
i getYValue
, które odpowiadają wartościom xi ay na wykresie.
XYChart.Data data = new XYChart.Data(1,3);
System.out.println(data.getXValue()); // Will print 1
System.out.println(data.getYValue()); // Will print 3
Siekiery
Przed utworzeniem LineChart
musimy zdefiniować jego osie. Na przykład domyślny konstruktor bez argumentów klasy NumberAxis
utworzy oś automatycznego NumberAxis
, która jest gotowa do użycia i nie wymaga dalszej konfiguracji.
Axis xAxis = new NumberAxis();
Przykład
W pełnym poniższym przykładzie tworzymy dwie serie danych, które będą wyświetlane na tym samym wykresie. Etykiety, zakresy i wartości zaznaczenia osi są wyraźnie zdefiniowane.
@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);
}