[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 차트에서는 풍속과 풍향을 화살표로 표현합니다. 풍속은 화살표의 길이로 나타내고, 풍향은 화살표의 방향으로 나타냅니다.