2011-08-26 131 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