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 중국어 웹사이트의 기타 관련 기사를 참조하세요!