我在向XYSeries添加点时遇到问题。我有两节课。一个是Sample
(它有一个main
方法),另一个类是JfreeChart
(它有JfreeChart
代码)。在我的Sample
类中,我有一个最初有10行的2D数组sample[row][2]
,然后我需要调用JfreeChart
类并将它们添加到XYSeries并显示散点图。我设法做到了这一点,但是下次我调用Jfreechart
类时,我的数组有25行。
我需要将值添加到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)当我打电话给“First Time”JfreeChart Class时,我将在我的样本数组中使用这些Pales
(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 :(得分:8)
您可以使用其中一种可用的add()
方法向XYSeries
添加新值,如example所示。如果您要获得不定的行,则需要发布sscce。
附录:仔细观察你的例子(最近更新的)genesis,一些混乱是可以理解的:根本不需要数组。下面的示例包含一个按钮,可以将新样本添加到第二个系列中。
单击“添加”按钮可以更改点的颜色吗?
每个新系列都是新颜色,如example所示。要更改单个颜色,建议的方法是覆盖渲染器的getItemPaint()
方法,如图here所示。
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);
}
});
}
}