Representing 3D data in a 2D Graph with JFreeChart

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
akib99
Posts: 1
Joined: Thu Dec 08, 2011 11:12 pm
antibot: No, of course not.

Representing 3D data in a 2D Graph with JFreeChart

Post by akib99 » Thu Dec 08, 2011 11:21 pm

I'm currently trying to use JFreeChart to represent 3D data in a 2D graph.

Essentially, I have a 2d array called data[j]. The i and j represent the y and x coordinates where I want to plot. The value of data[j] represents a frequency value, which I want to represent in the graph as a colour.

I'm not entirely sure what something like this is called, but it would look something like this: http://barsic.spbu.ru/www/b_graph/gr3d4b.jpg

Now I have been trying to do this using XYBlockRenderer, however I am having issues with defining the dataset. I am trying to use DefaultXYZDataset, but I'm really confused at how to even define the data here.

I've got something like this, but it doesn't do anything really, as I'm really lost at how to use DefaultXYZDataset.

Code: Select all

DefaultXYZDataset dataset = new DefaultXYZDataset();
    	
    	Concentration.dataoutHeight = Concentration.dataout[0].length;
    	
    	System.out.println(Concentration.dataoutHeight);
    	System.out.println(ImageProcessor.MAXCBVINT);
    	double[][] data = new double[3][ImageProcessor.MAXCBVINT];
    	
 
    	for (int i = 0; i < Concentration.dataoutHeight; i++) {
    		for (int j = 0; j < ImageProcessor.MAXCBVINT; j++) {
    			
    			data[0][j] = j;//x value
                data[1][j] = i;//y value
                data[2][j] = Concentration.dataout[j][i][0];//Colour
                
			}
        	dataset.addSeries(i, data);

		}	  
    	NumberAxis xAxis = new NumberAxis("Intensity"); 
        xAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 
        xAxis.setLowerMargin(0.0); 
        xAxis.setUpperMargin(0.0); 
        NumberAxis yAxis = new NumberAxis("Distance to Closest Blood Vessel (um)"); 
        yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 
        yAxis.setLowerMargin(0.0); 
        yAxis.setUpperMargin(0.0); 
        XYBlockRenderer renderer = new XYBlockRenderer(); 
        PaintScale scale = new GrayPaintScale(0, 10000.0); 
        renderer.setPaintScale(scale); 
        renderer.setBlockHeight(1);
        renderer.setBlockWidth(1);
        XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer); 
        plot.setBackgroundPaint(Color.lightGray); 
        plot.setDomainGridlinesVisible(false); 
        plot.setRangeGridlinePaint(Color.white); 
        JFreeChart chart = new JFreeChart("Surface Plot", plot); 
        chart.removeLegend(); 
        chart.setBackgroundPaint(Color.white); 
    	
        
        
        
        ChartFrame frame = new ChartFrame("Surface Map - "+
    			(Concentration.testing?"TESTING using "+Concentration.testfile:currentFile.getName()), chart);
    	frame.pack();
    	frame.setVisible(true);

Locked