Spec-Zone.ru › OpenJavaFX 17

Пакет javafx.scene.chart

Интерфейс JavaFX предоставляет набор компонентов диаграмм, которые являются очень удобным способом визуализации данных. Разработчики приложений могут использовать эти готовые графические диаграммы, предоставляемые средой выполнения JavaFX, для визуализации самых разных данных.

Предоставляются общие типы диаграмм, такие как Bar, Line, Area, Pie, Scatter и Bubble диаграммы. Эти диаграммы легко создавать и настраивать. API диаграмм JavaFX ориентирован на визуализацию, а не на модель.

Диаграммы JavaFX поддерживают анимацию компонентов диаграммы, а также автоматическое масштабирование осей диаграммы. Кроме того, как и другие элементы управления пользовательского интерфейса JavaFX, визуальные компоненты диаграммы можно стилизовать с помощью CSS. Таким образом, существуют несколько общедоступных визуальных свойств, которые можно стилизовать с помощью CSS. Пример приведен ниже в документе.

Ниже приведена таблица, перечисляющая существующие типы диаграмм и краткое описание их предполагаемого использования.

Таблица типов диаграмм

Диаграмма

Описание

LineChart

Строит линию между точками данных в ряду. Обычно используется для просмотра трендов данных во времени.

AreaChart

Строит область между линией, соединяющей точки данных, и осью. Подходит для сравнения кумулятивных итогов во времени.

BarChart

Строит прямоугольные столбцы с высотами, указывающими значения данных, которые они представляют, и соответствующими категориям, к которым они относятся. Используется для отображения прерывных/дискретных данных.

PieChart

Строит круговую диаграмму, разделенную на сегменты, где каждый сегмент представляет собой значение как пропорцию от общего значения. Выглядит как пирог, отсюда и название.

BubbleChart

Строит пузырьки для точек данных в ряду. Каждый нарисованный элемент отображает три параметра на диаграмме 2D и, следовательно, является уникальным типом диаграммы.

ScatterChart

Строит символы для точек данных в ряду. Этот тип диаграммы полезен при просмотре распределения данных и корреляции, если есть какие-либо кластеризации.

Класс Chart является базовым классом для всех диаграмм. Он отвечает за рисование фона, рамки, заголовка и легенды. Его можно расширить для создания пользовательских типов диаграмм. Класс XYChart является базовым классом для всех диаграмм с двумя осями и расширяет класс Chart. Он в основном отвечает за рисование двух осей и фона области построения диаграммы. Большинство диаграмм расширяются от класса XYChart, за исключением PieChart, который расширяет класс Chart, так как это не диаграмма с двумя осями.

Пакет javafx.scene.chart включает классы осей, которые можно использовать при создании диаграмм с двумя осями. Axis является абстрактным базовым классом всех осей диаграмм. CategoryAxis строит строковые категории, где каждое значение является уникальной категорией вдоль оси. NumberAxis строит диапазон чисел с основными метками через каждые tickUnit.

Например, BarChart строит данные из последовательности объектов XYChart.Series. Каждый ряд содержит объекты XYChart.Data.


    // add data
    XYChart.Series<String,Number> series1 = new XYChart.Series<String,Number>();
    series1.setName("Data Series 1");
    series1.getData().add(new XYChart.Data<String,Number>("2007", 567));

Аналогичным образом можно определить больше объектов рядов. Следующий фрагмент кода показывает, как создать BarChart с 3 категориями и ее осями X и Y:


    static String[] years = {"2007", "2008", "2009"};
    final CategoryAxis xAxis = new CategoryAxis();
    final NumberAxis yAxis = new NumberAxis();
    final BarChart<String,Number> bc = new BarChart<String,Number>(xAxis, yAxis);
    xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList(years)));
    bc.getData().addAll(series1, series2, series3);

Диаграммы JavaFX очень хорошо подходят для реального времени или динамических диаграмм (например, онлайн-акции, веб-трафик и т.д.) из наборов данных в реальном времени. Вот пример динамической диаграммы, созданной с помощью смоделированных данных. Timeline используется для моделирования динамических данных для изменения цены акций во времени (часы).


    private XYChart.Series<Number,Number> hourDataSeries; 
    private NumberAxis xAxis;
    private Timeline animation;
    private double hours = 0; 
    private double timeInHours = 0;
    private double prevY = 10;
    private double y = 10; 

    // timeline to add new data every 60th of a second
    animation = new Timeline();
    animation.getKeyFrames().add(new KeyFrame(Duration.millis(1000 / 60), new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent actionEvent) {
            // 6 minutes data per frame
            for(int count = 0; count < 6; count++) {
                nextTime();
                plotTime();
            }
        }
    }));
    animation.setCycleCount(Animation.INDEFINITE);
    xAxis = new NumberAxis(0, 24, 3);
    final NumberAxis yAxis = new NumberAxis(0, 100, 10);
    final LineChart<Number,Number> lc = new LineChart<Number,Number>(xAxis, yAxis);

    lc.setCreateSymbols(false);
    lc.setAnimated(false);
    lc.setLegendVisible(false);
    lc.setTitle("ACME Company Stock");

    xAxis.setLabel("Time");
    xAxis.setForceZeroInRange(false);
    yAxis.setLabel("Share Price");
    yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis, "$", null));

    hourDataSeries = new XYChart.Series<Number,Number>();
    hourDataSeries.setName("Hourly Data");
    hourDataSeries.getData().add(new XYChart.Data<Number,Number>(timeInHours, prevY));
    lc.getData().add(hourDataSeries);

    private void nextTime() {
        if (minutes == 59) {
            hours++;
            minutes = 0;
        } else {
            minutes++;
        }
        timeInHours = hours + ((1d/60d) * minutes);
    }

    private void plotTime() {
        if ((timeInHours % 1) == 0) {
            // change of hour
            double oldY = y;
            y = prevY - 10 + (Math.random() * 20);
            prevY = oldY;
            while (y < 10 || y > 90) y = y - 10 + (Math.random() * 20);
            hourDataSeries.getData().add(new XYChart.Data<Number, Number>(timeInHours, prevY));
            // after 25hours delete old data
            if (timeInHours > 25) hourDataSeries.getData().remove(0);
            // every hour after 24 move range 1 hour
            if (timeInHours > 24) {
                xAxis.setLowerBound(xAxis.getLowerBound() + 1);
                xAxis.setUpperBound(xAxis.getUpperBound() + 1);
            }
        }
    } 

Метод start должен вызвать animation.play() для запуска смоделированной динамической диаграммы.

См. документацию пакета javafx.scene.control по стилизации CSS. Пример стилизации диаграммы с помощью CSS выглядит следующим образом: для установки фона содержимого диаграммы в определенный цвет:

.chart-content { -fx-background-color: cyan;}

Цвет линии диаграммы Line Chart можно стилизовать следующим образом:

.chart-series-line { -fx-stroke: green; -fx-stroke-width: 4px;}


Краткое описание классов
Класс Описание
AreaChart<X,​Y>
AreaChart - Отображает область между линией, соединяющей точки данных, и линией 0 на оси Y.
Axis<T>
Базовый класс для всех осей в JavaFX, представляющий ось, нарисованную на области графика.
Axis.TickMark<T>
TickMark представляет текст метки, а также связанные свойства для каждой метки на оси.
BarChart<X,​Y>
График, отображающий столбцы, представляющие значения данных для категории.
BubbleChart<X,​Y>
Тип графика, отображающий пузырьки для точек данных в ряду.
CategoryAxis
Реализация оси, которая работает со строковыми категориями, где каждое значение представляет уникальную категорию (метку) на оси.
Chart
Базовый класс для всех графиков.
LineChart<X,​Y>
Линейный график отображает линию, соединяющую точки данных в ряду.
NumberAxis
Класс оси, который отображает диапазон чисел с основными метками через каждые tickUnit.
NumberAxis.DefaultFormatter
По умолчанию форматировщик чисел для NumberAxis, который синхронизирован с автоматическим масштабированием и форматирует значения должным образом.
PieChart
Отображает круговую диаграмму.
PieChart.Data
Элемент данных круговой диаграммы, представляет один сектор на круговой диаграмме
ScatterChart<X,​Y>
Тип графика, отображающий символы для точек данных в ряду.
StackedAreaChart<X,​Y>
StackedAreaChart — это разновидность AreaChart, которая отображает тенденции вклада каждого значения.
StackedBarChart<X,​Y>
StackedBarChart — это разновидность BarChart, которая отображает столбцы, представляющие значения данных для категории.
ValueAxis<T extends Number>
Ось, данные которой определены как числа.
XYChart<X,​Y>
Базовый класс графика для всех графиков с 2 осями.
XYChart.Data<X,​Y>
Один элемент данных с данными для графиков с 2 осями
XYChart.Series<X,​Y>
Именованный ряд элементов данных
Краткое описание перечислений
Перечисление Описание
LineChart.SortingPolicy
Это перечисление определяет политику для LineChart.axisSortingPolicyProperty().

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API