使用JfreeChartdynamic添加点到XYSeries
我在添加点到XYSeries时遇到问题。 我有两个class。 一个是Sample
(它有一个main
方法),另一个类是JfreeChart
(它有JfreeChart
代码)。 在我的Sample
类中,我有一个二维数组sample[row][2]
,最初有10行,然后我需要调用JfreeChart
类,并将它们添加到XYSeries并显示散点图。 我设法做到这一点,但下一次我调用Jfreechart
类我的arrays有25行。
我需要将这些值添加到XYSeries并将它们绘制在散点图上,散点图应显示不同颜色的前10行值,然后使用不同的颜色显示25行值…然后继续。 任何人都可以提供一些build议或例子?
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类的时候,我的Sample Array(0.20,0.19)(0.8,0.79)(0.41,0.45)(0.77,0.79)(0.54,0.65)
这个过程需要几次(10次)所以我需要添加这个到“XYSeries”和“XYSeriesCollection”,并显示“第一次”值和“第二次”值,当我打电话第二次JFreeChart类
您可以使用其中一个可用的add()
方法将新值添加到XYSeries
,如本例所示。 如果你遇到不必要的行,你需要发布一个sscce 。
附录:仔细研究你的例子的(最近更新的) 起源 ,一些混淆是可以理解的:根本不需要数组。 下面的例子包含一个button,可以将新的样本添加到第二个系列。
点击“添加”button后,可以更改点的颜色吗?
每个新系列都是一种新颜色,如本例所示。 要更改单独的颜色,推荐的方法是重写渲染器的getItemPaint()
方法,如下所示。
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); } }); } }