Hinzufügen von Punkten zu XYSeries dynamisch mit JfreeChart

Ich habe Probleme beim Hinzufügen von Punkten zu XYSeries. Ich habe zwei classn. Eins ist Sample (es hat eine Hauptmethode) und die andere class ist JfreeChart (es hat JfreeChart Code). In meiner Sample class habe ich ein 2D-Array- sample[row][2] das anfänglich 10 Zeilen hat, und dann muss ich die JfreeChart class JfreeChart und sie zu XYSeries hinzufügen und ein Streudiagramm anzeigen. Das habe ich geschafft, aber beim nächsten Aufruf der Jfreechart class hat mein Array 25 Zeilen.

Ich muss die Werte zu XYSeries hinzufügen und sie in einem Streudiagramm darstellen, das die Werte der früheren 10 Zeilen mit verschiedenen colors und jetzt 25 Zeilenwerte mit verschiedenen colors anzeigen soll … und das geht weiter. Kann jemand einige Vorschläge oder Beispiele geben?

 class Sample { public static void main(String args[]) { System.out.print("(X,Y) Paired Values"); double[][] sample = new double[row][2]; for (int g = 0; g < sampe.length; g++) { for (int h = 0; h < 2; h++) { System.out.print("" + sample[g][h] + ","); } } JfreeChart sample = new JfreeChart("Demo", sample); } static XYDataset samplexydataset2(double[][] sample) { XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); XYSeries series = new XYSeries("DataSet"); for (int x = 0; x < sample.length; x++) { series.add(sample[x][0], sample[x][1]); } xySeriesCollection.addSeries(series); return xySeriesCollection; } } 

1) Wenn ich “First Time” anrufe, hat JfreeChart class I diese Paare in meinem Sample Array

(0,78,0,80) (0,21,0,19) (0,181,0,187)

2) Wenn ich JfreeChart class “Second time” aufrufen werde ich Diffrent Werte in meinem Sample Array haben (0,20,0,19) (0,8,0.79) (0.41,0.45) (0.77,0.79) (0.54,0.65)

Und das geht für einige Male (10 mal) Also muss ich dies zu “XYSeries” und “XYSeriesCollection” hinzufügen und die “erste Zeit” -Werte und “zweite Zeit” Werte anzeigen, wenn ich die zweite Zeit JFreeChart-class aufrufen

   

Sie können der XYSeries mithilfe einer der verfügbaren add() -Methoden neue Werte add() , wie in diesem Beispiel gezeigt . Wenn Sie zufällige Zeilen erhalten, müssen Sie einen sscce posten .

Nachtrag: Wenn Sie die (kürzlich aktualisierte) Genese Ihres Beispiels genauer betrachten, ist etwas Verwirrung verständlich: Es wird überhaupt kein Array benötigt. Das folgende Beispiel enthält eine Schaltfläche, die einer zweiten Serie neue Beispiele hinzufügt.

Kann ich die Farbe der Punkte ändern, wenn ich auf “Hinzufügen” klicke?

Jede neue Serie hat eine neue Farbe, wie in diesem Beispiel gezeigt . Um einzelne colors zu ändern, empfiehlt es sich, die getItemPaint() -Methode des Renderers wie hier gezeigt zu überschreiben.

ScatterAdd

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.util.*; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.*; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /** * @see https://stackoverflow.com/questions/7205742 * @see https://stackoverflow.com/questions/7208657 * @see https://stackoverflow.com/questions/7071057 */ public class ScatterAdd extends JFrame { private static final int N = 8; private static final String title = "Scatter Add Demo"; private static final Random rand = new Random(); private XYSeries added = new XYSeries("Added"); public ScatterAdd(String s) { super(s); final ChartPanel chartPanel = createDemoPanel(); this.add(chartPanel, BorderLayout.CENTER); JPanel control = new JPanel(); control.add(new JButton(new AbstractAction("Add") { @Override public void actionPerformed(ActionEvent e) { for (int i = 0; i < N; i++) { added.add(rand.nextGaussian(), rand.nextGaussian()); } } })); this.add(control, BorderLayout.SOUTH); } private ChartPanel createDemoPanel() { JFreeChart jfreechart = ChartFactory.createScatterPlot( title, "X", "Y", createSampleData(), PlotOrientation.VERTICAL, true, true, false); XYPlot xyPlot = (XYPlot) jfreechart.getPlot(); xyPlot.setDomainCrosshairVisible(true); xyPlot.setRangeCrosshairVisible(true); XYItemRenderer renderer = xyPlot.getRenderer(); renderer.setSeriesPaint(0, Color.blue); NumberAxis domain = (NumberAxis) xyPlot.getDomainAxis(); domain.setVerticalTickLabels(true); return new ChartPanel(jfreechart); } private XYDataset createSampleData() { XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); XYSeries series = new XYSeries("Random"); for (int i = 0; i < N * N; i++) { double x = rand.nextGaussian(); double y = rand.nextGaussian(); series.add(x, y); } xySeriesCollection.addSeries(series); xySeriesCollection.addSeries(added); return xySeriesCollection; } public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ScatterAdd demo = new ScatterAdd(title); demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); demo.pack(); demo.setLocationRelativeTo(null); demo.setVisible(true); } }); } }