Как представить ось x localdatetime java

Аватар пользователя Сергей Якимович
Сергей Якимович
23 февраля 2023

Чтобы использовать при построении графика для оси х данные LocalDateTime, нам надо перевести их в int.

Для примера нарисуем график погоды c использованием библиотеки swing :

import javax.swing.*;
import java.awt.*;
import java.time.LocalDateTime;
import java.time.Period;
import java.util.ArrayList;
import java.util.List;

public class App {
    public static void main(String[] args) {
        // создадим список с данными погоды
        class Weather {
            LocalDateTime time;
            int temperature;

            public Weather(LocalDateTime time, int temperature) {
                this.time = time;
                this.temperature = temperature;
            }
        }
        LocalDateTime time = LocalDateTime.now();
        List<Weather> list = new ArrayList<>(List.of(new Weather(time, 0),
                new Weather(time.minusDays(1), 5), new Weather(time.minusDays(2), 0),
                new Weather(time.plusDays(1), 10), new Weather(time.plusDays(2), 5)));

        int cX = 20; // смещение для рисования осей
        int cY = 350;
        int points = list.size(); // количество точек на графике

        // создадим массив координат х
        list.sort((t1,t2) -> t1.time.compareTo(t2.time));
        LocalDateTime minTime = list.get(0).time;
        int[] xData = new int[points];
        for(int i = 0; i < points; i++) {
            xData[i] = Period.between(minTime.toLocalDate(), list.get(i).time.toLocalDate()).getDays() * 50 + cX;
        }
        // создадим массив координат y
        int[] yData = list.stream()
                .mapToInt(y -> cY - y.temperature * 10)
                .toArray();

        class PaintWeather extends JPanel {
            @Override
            protected void paintComponent(Graphics graphics) {
                Graphics2D graphics2D = (Graphics2D)graphics;
                graphics2D.drawLine(cX, cY, cX, cX); // рисуем оси
                graphics2D.drawLine(cX, cY, cY + 100, cY);
                graphics2D.drawPolyline(xData, yData, points); // рисуем график
            }
        }

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new PaintWeather(), BorderLayout.CENTER);

        JFrame frame = new JFrame("График температур");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }
}
0 0

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

Тест-драйв

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.