[java] JFreeChart에서 Wind 차트 그리기

JFreeChart는 Java로 작성된 오픈 소스 차트 라이브러리입니다. 이 라이브러리를 사용하여 다양한 유형의 차트를 그릴 수 있습니다. 이번에는 JFreeChart를 사용하여 Wind 차트를 그려보도록 하겠습니다.

JFreeChart 설치

JFreeChart는 Maven 또는 Gradle을 사용하여 간단하게 설치할 수 있습니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.3</version>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'org.jfree:jfreechart:1.5.3'

Wind 차트 그리기

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.VectorRenderer;
import org.jfree.data.xy.VectorSeries;
import org.jfree.data.xy.VectorSeriesCollection;
import org.jfree.data.xy.VectorXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class WindChartExample extends ApplicationFrame {

    public WindChartExample(String title) {
        super(title);
        
        // Wind 데이터 생성
        List<Double> directionData = new ArrayList<>();
        List<Double> speedData = new ArrayList<>();
        
        // Wind 데이터 추가 (임의의 값)
        directionData.add(45.0);
        speedData.add(5.5);
        directionData.add(90.0);
        speedData.add(8.2);
        directionData.add(135.0);
        speedData.add(10.7);
        
        // VectorSeries 생성
        VectorSeries windSeries = new VectorSeries("Wind");
        for (int i = 0; i < directionData.size(); i++) {
            double direction = directionData.get(i);
            double speed = speedData.get(i);
            windSeries.add(i, 0, speed * Math.sin(Math.toRadians(direction)), speed * Math.cos(Math.toRadians(direction)));
        }
        
        // VectorSeriesCollection 생성
        VectorSeriesCollection dataset = new VectorSeriesCollection();
        dataset.addSeries(windSeries);
        
        // Wind 차트 생성
        JFreeChart chart = ChartFactory.createWindChart("Wind Chart", "", "", dataset, PlotOrientation.VERTICAL, true, true, false);
        XYPlot plot = (XYPlot) chart.getPlot();
        
        // 차트 스타일 설정
        VectorRenderer renderer = (VectorRenderer) plot.getRenderer();
        renderer.setSeriesPaint(0, Color.BLUE);
        renderer.setSeriesOutlinePaint(0, Color.BLACK);
        renderer.setArrowLength(10);
        renderer.setBaseOutlineStroke(new BasicStroke(2));
        renderer.setShapesVisible(false);
        
        Font titleFont = new Font("Arial", Font.PLAIN, 18);
        chart.getTitle().setFont(titleFont);
        
        Font axisFont = new Font("Arial", Font.PLAIN, 12);
        plot.getDomainAxis().setLabelFont(axisFont);
        plot.getRangeAxis().setLabelFont(axisFont);
        
        // 차트 패널 생성
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 300));
        setContentPane(chartPanel);
    }
    
    public static void main(String[] args) {
        WindChartExample example = new WindChartExample("Wind Chart Example");
        example.pack();
        RefineryUtilities.centerFrameOnScreen(example);
        example.setVisible(true);
    }
}

실행 결과

위 예제를 실행하면 Wind 차트가 나타납니다. Wind 차트에서는 풍속과 풍향을 화살표로 표현합니다. 풍속은 화살표의 길이로 나타내고, 풍향은 화살표의 방향으로 나타냅니다.

Wind Chart Example

참고 자료