2011-08-26 73 views
4

我在添加點到XYSeries時遇到問題。我有兩個班。一個是Sample(它有一個main方法),另一個類是JfreeChart(它有JfreeChart代碼)。在我的Sample類中,我有一個二維數組sample[row][2],它最初有10行,然後我需要調用JfreeChart類並將它們添加到XYSeries並顯示散點圖。我設法做到了這一點,但下次我撥打Jfreechart類時,我的Array有25行。使用JfreeChart動態添加點到XYSeries

我需要將這些值添加到XYSeries並將它們繪製在散點圖上,散點圖應顯示不同顏色的前10行值,然後顯示具有不同顏色的25行值......並繼續。任何人都可以提出一些建議或例子嗎

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)當我打電話 「第一時間」 的JFreeChart類,我將有我的樣本數組這些對

(0.78,0.80) (0.21,0.19) (0.181,0.187)

2)當我打電話的JFreeChart類 「第二時間」 我將在樣本陣列 (0.20,0.19) (0.8,0.79) (0.41,0.45) (0.77,0.79) 具有不同勢的值(0.54 ,0.65)

這個過程需要幾次(10次)所以我需要把它添加到「XYSeries」和「XYSeriesCollection」,並在我打電話時顯示「第一次」值和「第二次」值第二次JFreeChart類

+0

我要畫一條線圖中這種散點我必須提前 – Mukthi

回答

8

您可以使用add()方法中的一種將新值添加到XYSeries,如example所示。如果您遇到不必要的行,您需要發佈sscce

附錄:仔細看看您示例中的(最近更新的)genesis,有些混淆是可以理解的:根本不需要數組。下面的例子包含一個按鈕,可以將新樣本添加到第二個系列。

當我點擊「添加」按鈕時,可以更改點的顏色嗎?

每個新系列都是一種新顏色,如example所示。要更改單個顏色,推薦的方法是覆蓋渲染器的getItemPaint()方法,如here所示。

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); 
      } 
     }); 
    } 
} 
+0

我已經通過了例如使用線chart.Thanks相同manner.Instead,但我可以」因爲我的初學者很瞭解。在我的問題中,我使用XYSeriesCollection&XYSeries,因爲我的值是配對值(X,Y),我需要將它們繪製在散點圖上,以及如何在上面使用TimeSeriesColelction?我將發佈Code..please幫助我對這些 – Sam

+0

我已經詳細闡述了上述內容。 – trashgod

+0

非常感謝!這對我幫助很大。再次出現一個小問題當我點擊「添加」按鈕時,是否可以更改點的顏色,以便與以前的點區分開來......如果您不介意,請點擊小例。:) – Sam