>Java >java지도 시간 >Java에서 축과 레이블을 사용하여 PNG 파일에 주석을 추가하는 방법은 무엇입니까?

Java에서 축과 레이블을 사용하여 PNG 파일에 주석을 추가하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-07 05:51:02204검색

How to Annotate a PNG File with Axes and Labels in Java?

Java에서 축과 레이블이 있는 PNG 파일에 주석을 추가하는 방법

기존 PNG 이미지에 축과 레이블을 추가하는 것이 어려울 수 있습니다. 오류와 불일치로 이어질 수 있는 수정을 시도하기보다는 차트 생성 과정에서 주석을 통합하는 것이 좋습니다.

JFreeChart를 사용하여 축 및 레이블 사용자 정의

JFreeChart는 다음을 제공합니다. 축 및 레이블을 포함하여 차트의 모양을 사용자 정의하기 위한 포괄적인 API입니다. 다음 예에서는 맞춤형 주석이 포함된 사용자 정의 차트를 생성하는 방법을 보여줍니다.

<code class="java">import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class ResponseTime {

    private static final int N = 600;
    private static final String title = "ResponseTime";
    private static final Random random = new Random();
    private static final Shape circle = new Ellipse2D.Double(-3, -3, 6, 6);
    private static final Color line = Color.gray;

    private ChartPanel createPanel() {
        JFreeChart chart = ChartFactory.createXYLineChart(
            title, "Elapsed Time (secs)", "Response Time (secs)",
            createDataset(), PlotOrientation.VERTICAL, true, true, false);
        XYPlot plot = chart.getXYPlot();
        MyRenderer renderer = new MyRenderer(true, true, N);
        plot.setRenderer(renderer);
        renderer.setSeriesShape(0, circle);
        renderer.setSeriesPaint(0, line);
        renderer.setUseFillPaint(true);
        renderer.setSeriesShapesFilled(0, true);
        renderer.setSeriesShapesVisible(0, true);
        renderer.setUseOutlinePaint(true);
        renderer.setSeriesOutlinePaint(0, line);
        ValueAxis range = plot.getRangeAxis();
        range.setLowerBound(0.5);
        return new ChartPanel(chart);
    }

    private static class MyRenderer extends XYLineAndShapeRenderer {

        private List<Color> clut;

        public MyRenderer(boolean lines, boolean shapes, int n) {
            super(lines, shapes);
            clut = new ArrayList<>(n);
            for (int i = 0; i < n; i++) {
                clut.add(Color.getHSBColor((float) i / n, 1, 1));
            }
        }

        @Override
        public Paint getItemFillPaint(int row, int column) {
            return clut.get(column);
        }
    }

    private XYDataset createDataset() {
        XYSeriesCollection result = new XYSeriesCollection();
        XYSeries series = new XYSeries("Series 1");
        for (double x = 0; x < N - 1; x++) {
            series.add(x, f(x));
        }
        series.add(25, 1.75); // outlier
        result.addSeries(series);
        return result;
    }

    private double f(double x) {
        double y = 0.004 * x + .75;
        return y + random.nextGaussian() * y / 10;
    }

    private void display() {
        JFrame f = new JFrame(title);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(createPanel());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ResponseTime().display();
            }
        });
    }
}</code>

이 접근 방식을 사용하면 축, 레이블 및 플롯 요소의 스타일과 배치를 포함하여 차트의 모든 측면을 제어할 수 있습니다.

개별 항목 색상 코딩

개별 항목을 색상으로 구분하기 위해 JFreeChart는 XYLineAndShapeRenderer 클래스에 getItemFillPaint() 메서드를 제공합니다. 사용 방법은 다음과 같습니다.

<code class="java">private static class MyRenderer extends XYLineAndShapeRenderer {

    private List<Color> clut;

    public MyRenderer(boolean lines, boolean shapes, int n) {
        super(lines, shapes);
        clut = new ArrayList<>(n);
        for (int i = 0; i < n; i++) {
            clut.add(Color.getHSBColor((float) i / n, 1, 1));
        }
    }

    @Override
    public Paint getItemFillPaint(int row, int column) {
        return clut.get(column);
    }
}</code>

이 메서드를 재정의하면 차트의 각 항목에 대해 사용자 정의 색상을 지정할 수 있습니다. Color.getHSBColor() 메서드는 전체 색상 스펙트럼을 생성하는 데 사용됩니다.

이러한 기술을 따르면 특정 요구 사항을 충족하는 주석이 포함된 사용자 정의 차트를 만들 수 있습니다.

위 내용은 Java에서 축과 레이블을 사용하여 PNG 파일에 주석을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.