Comment annoter un fichier PNG avec des axes et des étiquettes en Java
Ajouter des axes et des étiquettes à une image PNG existante peut être un défi. Plutôt que de tenter des modifications qui pourraient entraîner des erreurs et des incohérences, il est recommandé d'intégrer les annotations lors du processus de création du graphique.
Personnalisation des axes et des étiquettes à l'aide de JFreeChart
JFreeChart fournit une API complète pour personnaliser l'apparence des graphiques, y compris les axes et les étiquettes. L'exemple suivant illustre comment créer un graphique personnalisé avec des annotations personnalisées :
<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>
Cette approche vous permet de contrôler chaque aspect du graphique, y compris le style et l'emplacement des axes, des étiquettes et des éléments de tracé.
Codage couleur des éléments individuels
Pour coder par couleur des éléments individuels, JFreeChart fournit la méthode getItemFillPaint() dans la classe XYLineAndShapeRenderer. Voici comment l'utiliser :
<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>
En remplaçant cette méthode, vous pouvez spécifier une couleur personnalisée pour chaque élément du graphique. La méthode Color.getHSBColor() est utilisée pour générer un spectre complet de couleurs.
En suivant ces techniques, vous pouvez créer des graphiques personnalisés avec des annotations qui répondent à vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!