मुझे नहीं लगता कि एक स्थिर छवि को संशोधित करना बहुत अच्छा काम करेगा, क्योंकि यह अनिवार्य रूप से पंजीकरण त्रुटियों और बेमेल शैलियों का नेतृत्व करेगा। इसके बजाय, चार्ट के निर्माण में किसी भी प्रतिपादन को एकीकृत करें। दृष्टिकोण का उपयोग here, sscce नीचे उल्लिखित आकार, रंग और अक्ष को वांछित के रूप में अनुकूलित करने के कुछ तरीकों को दिखाता है।
अनुपूरक: व्यक्तिगत वस्तुओं को रंगाने के लिए, एपीआई here दिखाए गए दृष्टिकोण की सिफारिश करता है, जिसमें एक कस्टम रेंडरर getItemPaint()
ओवरराइड करता है। Color.getHSBColor()
रंगों का एक पूर्ण स्पेक्ट्रम बनाने के लिए प्रयोग किया जाता है।
यहाँ तुलना के लिए मूल, डिफ़ॉल्ट रेंडरर है:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Paint;
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;
/** @see https://stackoverflow.com/q/9843451/230513 */
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<Color>(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();
}
});
}
}
क्या आप 'png' से लिंक कर सकते हैं? क्या आपके पास मूल डेटा है? – trashgod
इस तरह कुछ http://www.goldb.org/goldblog/cmg_images/pylot_latency_sample.png लेकिन यह एक पीएनजी – Grammin
में नीले और सफेद बिंदु होंगे क्या आप वास्तव में मौजूदा छवि को बदलना चाहते हैं? क्या मौजूदा डेटा महत्वपूर्ण है? छवि के जैसा कोई नया चार्ट क्यों नहीं बनाते? – trashgod