[java] JFreeChart에서 Custom Axis 사용하기

JFreeChart는 Java로 작성된 오픈 소스 라이브러리로, 다양한 종류의 그래프를 만들 수 있습니다. 이러한 그래프에는 X축과 Y축이 필요하며, JFreeChart에서는 기본적으로 제공되는 Axis 클래스를 사용하여 축을 설정합니다. 그러나 때로는 기본 Axis 클래스로는 구현할 수 없는 사용자 지정 축이 필요할 수 있습니다.

JFreeChart에서는 사용자 지정 Axis를 만드는 것이 매우 간단합니다. 다음은 JFreeChart에서 Custom Axis를 사용하는 방법을 간단한 예제와 함께 안내합니다.

1. Custom Axis 클래스 생성하기

먼저 사용자 지정 Axis를 나타내는 클래스를 생성해야 합니다. 이 클래스는 org.jfree.chart.axis.Axis 클래스를 상속받아야 합니다. 해당 클래스에서는 사용자 지정 축에 필요한 로직과 그려질 레이블에 대한 정보를 제공해야 합니다.

import org.jfree.chart.axis.Axis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.text.TextBlockAnchor;
import org.jfree.ui.TextAnchor;

public class CustomAxis extends Axis {
    
    private String label;
    
    public CustomAxis(String label) {
        super();
        this.label = label;
    }
    
    @Override
    public void draw(java.awt.Graphics2D g2, double cursor, java.awt.geom.Rectangle2D plotArea, java.awt.geom.Rectangle2D dataArea, org.jfree.chart.plot.PlotRenderingInfo info) {
        // draw custom axis logic here
    }
    
    @Override
    protected void createLabel(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D plotArea, java.awt.geom.Rectangle2D dataArea, double value, int axis, TextAnchor anchor, TextAnchor rotateAnchor, double angle) {
        // create custom axis label here
    }
    
}

위의 코드에서 CustomAxis 클래스는 사용자 정의 축을 나타내는 기본 클래스입니다. 이 클래스에서는 사용자 정의 축의 로직을 구현할 수 있는 draw 메서드와 축 레이블을 생성할 수 있는 createLabel 메서드를 재정의합니다.

2. JFreeChart에 Custom Axis 추가하기

Custom Axis 클래스를 생성한 후에는 JFreeChart에 추가해야 합니다. 다음은 X축에 Custom Axis를 추가하는 간단한 예제입니다.

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class Main {
    
    public static void main(String[] args) {
        // 데이터셋 생성
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(1, "Series", "Category 1");
        dataset.addValue(2, "Series", "Category 2");
        dataset.addValue(3, "Series", "Category 3");
        
        // Custom Axis 생성
        CustomAxis customAxis = new CustomAxis("Custom Axis");
        
        // 그래프 생성
        JFreeChart chart = ChartFactory.createBarChart("Chart Title", "X Axis Label", "Y Axis Label", dataset, PlotOrientation.VERTICAL, true, true, false);
        
        // X축에 Custom Axis 추가
        chart.getCategoryPlot().setRangeAxis(customAxis);
        
        // 차트 프레임 생성
        ChartFrame frame = new ChartFrame("Frame Title", chart);
        frame.setVisible(true);
        frame.setSize(500, 500);
    }
    
}

위의 예제에서는 DefaultCategoryDataset 클래스를 사용하여 데이터셋을 생성하고, Custom Axis 클래스의 인스턴스를 생성하여 X축에 추가하고 있습니다. 그리고 나서 ChartFactory 클래스의 createBarChart 메서드를 사용하여 그래프를 생성하고, 차트 프레임에 추가하여 화면에 출력합니다.

이제 Custom Axis를 생성하고 JFreeChart에 추가하는 방법을 알게 되었습니다. 이를 활용하여 그래프 축에 자신만의 커스터마이징을 적용해보세요!

참고 자료