3

This is my First Month with Java, so I apologize for my stupid question in advance. I'm trying to make a simple program using Jfreechart. I want to display my 2D array on the scatter plot. here is the code:


package myappthatusesjfreechart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.general.DefaultPieDataset;

public class MyAppThatUsesJFreeChart {

    public static void main(String[] args) {
        // create a dataset...
        int[][] a2 = new int[10][5];

        // print array in rectangular form
        for (int r = 0; r < a2.length; r++) {
            for (int c = 0; c < a2[r].length; c++) {
                System.out.print(" " + a2[r][c]);
            }
            System.out.println("");
        }

        // create a chart...
        JFreeChart chart = ChartFactory.createScatterPlot(
            "Scatter Plot", // chart title
            "X", // x axis label
            "Y", // y axis label
            a2, // data  ***-----PROBLEM------***
            PlotOrientation.VERTICAL,
            true, // include legend
            true, // tooltips
            false // urls
            );

        // create and display a frame...
        ChartFrame frame = new ChartFrame("First", chart);
        frame.pack();
        frame.setVisible(true);
    }
}

The ;ChartFactory.createScatterPlot; is not allowing me to pass the 2d array, I want to ask is there any way that i can do it.

Tombart
  • 30,520
  • 16
  • 123
  • 136
Zeeshan
  • 31
  • 1
  • 1
  • 2

1 Answers1

11

The createScatterPlot() method expects an XYDataset, such as XYSeriesCollection. There are examples using XYSeriesCollection here and here.

Addendum: Here's an example more suited to a scatter plot; just replace a2 with createDataset() in the factory call.

private static final Random r = new Random();

private static XYDataset createDataset() {
    XYSeriesCollection result = new XYSeriesCollection();
    XYSeries series = new XYSeries("Random");
    for (int i = 0; i <= 100; i++) {
        double x = r.nextDouble();
        double y = r.nextDouble();
        series.add(x, y);
    }
    result.addSeries(series);
    return result;
}
Community
  • 1
  • 1
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
  • Thanks For your help, it really worked out. one more question how im suppose to change the shape of the points appearing on the graphs, right now they all are appearing in square, i want then to be in circle, square and rectangle. – Zeeshan Jul 26 '11 at 22:27
  • See `DefaultDrawingSupplier` and this [answer](http://stackoverflow.com/questions/6665354/changing-the-shapes-of-points-in-scatter-plot/6669529#6669529). You cab accept this answer by clicking the empty check mark at the left; see the [faq] for details. – trashgod Jul 27 '11 at 00:58