Aggiunta di punti a XYSeries in modo dinamico con JfreeChart

Sto affrontando problemi nell’aggiunta di punti a XYSeries. Ho due classi. Uno è Sample (ha un metodo main ) e l’altra class è JfreeChart (ha codice JfreeChart ). Nella mia class Sample ho un sample[row][2] array 2D sample[row][2] che ha inizialmente 10 righe, quindi devo chiamare la class JfreeChart e aggiungerli a XYSeries e visualizzare un grafico a dispersione. Sono riuscito a farlo, ma la prossima volta che chiamo la class Jfreechart mio array ha 25 righe.

Devo aggiungere i valori a XYSeries e tracciarli su un grafico a dispersione che dovrebbe mostrare i valori delle prime 10 righe con colors diversi e ora 25 valori di righe con colors diversi … e questo va avanti. Qualcuno può dare alcuni suggerimenti o esempi?

 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) Quando chiamo JFreeChart Class “First Time” avrò queste coppie nella mia Sample Array

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

2) Quando chiamo Class JFreeChart “Second time” avrò valori diversi nel mio Sample Array (0.20.0.19) (0.8.0.79) (0.41.0.45) (0.77,0.79) (0.54.0.65)

E questo va per poche volte (10 volte) Quindi ho bisogno di aggiungerlo a “XYSeries” e “XYSeriesCollection” e visualizzare i valori “First time” e “Second time” quando chiamo Second time JFreeChart Class

È ansible aggiungere nuovi valori a XYSeries utilizzando uno dei metodi disponibili add() , come mostrato in questo esempio . Se stai ricevendo righe avventizie, dovrai pubblicare un messaggio .

Addendum: esaminando più da vicino la genesi (recentemente aggiornata) del tuo esempio, è comprensibile una certa confusione: non è necessario alcun array. L’esempio di seguito include un pulsante che aggiunge nuovi campioni a una seconda serie.

Posso cambiare il colore dei punti quando clicco sul pulsante “Aggiungi”?

Ogni nuova serie è un nuovo colore, come mostrato in questo esempio . Per cambiare i singoli colors, il modo consigliato è quello di sovrascrivere il metodo getItemPaint() del renderer, come mostrato qui .

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 actionPerformsd(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); } }); } }