Heim  >  Artikel  >  Java  >  Wie kommentiere ich eine PNG-Datei mit Achsen und Beschriftungen in Java?

Wie kommentiere ich eine PNG-Datei mit Achsen und Beschriftungen in Java?

DDD
DDDOriginal
2024-11-07 05:51:02138Durchsuche

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

So versehen Sie eine PNG-Datei mit Achsen und Beschriftungen in Java mit Anmerkungen

Das Hinzufügen von Achsen und Beschriftungen zu einem vorhandenen PNG-Bild kann eine Herausforderung sein. Anstatt Änderungen vorzunehmen, die zu Fehlern und Inkonsistenzen führen könnten, wird empfohlen, die Anmerkungen während des Diagrammerstellungsprozesses zu integrieren.

Anpassen von Achsen und Beschriftungen mit JFreeChart

JFreeChart bietet eine umfassende API zum Anpassen des Aussehens von Diagrammen, einschließlich Achsen und Beschriftungen. Das folgende Beispiel zeigt, wie Sie ein benutzerdefiniertes Diagramm mit maßgeschneiderten Anmerkungen erstellen:

<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>

Mit diesem Ansatz können Sie jeden Aspekt des Diagramms steuern, einschließlich des Stils und der Platzierung der Achsen, Beschriftungen und Plotelemente.

Farbcodierung einzelner Elemente

Um einzelne Elemente farblich zu codieren, stellt JFreeChart die Methode getItemFillPaint() in der Klasse XYLineAndShapeRenderer bereit. So verwenden Sie es:

<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>

Durch Überschreiben dieser Methode können Sie für jedes Element im Diagramm eine benutzerdefinierte Farbe festlegen. Die Methode Color.getHSBColor() wird verwendet, um ein vollständiges Farbspektrum zu generieren.

Durch die Befolgung dieser Techniken können Sie benutzerdefinierte Diagramme mit Anmerkungen erstellen, die Ihren spezifischen Anforderungen entsprechen.

Das obige ist der detaillierte Inhalt vonWie kommentiere ich eine PNG-Datei mit Achsen und Beschriftungen in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn