Solved

drawing back to origin...

Posted on 2009-04-08
6
463 Views
Last Modified: 2012-05-06
I wrote a code to draw jfreechart... but there is one problem with it...

I am able to draw the graph for all the input values in the file...but after drawing all the values it is drawing back to origin..

what i mean is after plotting the last point it is taking (0,0) as next point and coming back...

so plz correct my code...
import java.io.*;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYBarDataset;
 
public class DisplayGraphics 
{	
  class ReadFile
  { 	
  	int kMaxLines = 60000; 	 	
  	double[][] valuePairs = new double[2][kMaxLines];
  	public void fileRead()
  	{
   		try  		
  		{  	
  	 		int kMaxLines = 60000;  
	   		FileInputStream fstream = new FileInputStream("c:/perl/output.txt");
	   		DataInputStream datastream = new DataInputStream(fstream);
	   		BufferedReader br = new BufferedReader(new InputStreamReader(datastream));
	   		String strLine;
	   		int line = 0;
	   		while ((strLine = br.readLine()) != null)
		 		{
	   			String temp_strs[] = strLine.split("\t");
	  			for (int j = 0; j < 2; j++)
	  				valuePairs[j][line] = Double.parseDouble(temp_strs[j]);
	  			//System.out.println(temp_strs[0] + " " + temp_strs[1]);
	  			line++;
	   		}
	 	 		datastream.close();
  		}
  		catch (Exception e)
  		{
  	    //file not found exception...
  			e.printStackTrace();
  		}
  	}
  }
  
  public void drawGraph()
  {
  	ReadFile rFile= new ReadFile();
  	rFile.fileRead();
  	DefaultXYDataset set = new DefaultXYDataset();
  	//addseries requires double array
    set.addSeries("Values" , rFile.valuePairs);
    //wrapper class that converts a standard XYDataset, 
    //into an IntervalXYDataset suitable for use in creating XY bar charts
    XYBarDataset barset = new XYBarDataset(set , 0.8);
    JFreeChart chart = ChartFactory.createXYBarChart(
    		"coverage depth" , "x" , false , "y" , 
        barset , PlotOrientation.VERTICAL , true , true , false);
    JFrame frame = new JFrame("Graph Showing Coverage values for chromosome-9");
    frame.setContentPane(new ChartPanel(chart));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);   
  }
 
  public static void main(String[] args)
  {
  	DisplayGraphics XY = new DisplayGraphics();
  	XY.drawGraph();
  }
}

Open in new window

0
Comment
Question by:shragi
  • 3
  • 2
6 Comments
 
LVL 92

Expert Comment

by:objects
ID: 24104153
you need to adjust the size of your array to match the number od data points
I'd suggest reading the points into a List and creating your aray from that list

http://helpdesk.objects.com.au/java/how-do-i-read-a-text-file-line-by-line-into-a-list
0
 

Author Comment

by:shragi
ID: 24104363
can u tell how to do ..that.. the link u had provided is understandable...but I am unable to make it to my code....so can u make those changes to my code ...
0
 
LVL 25

Accepted Solution

by:
InteractiveMind earned 500 total points
ID: 24107823
Try,
import java.io.*;
import java.util.*;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYBarDataset;
 
public class DisplayGraphics 
{       
  class ReadFile
  {     
        double[][] valuePairs;
        public void fileRead()
        {
		ArrayList<Double> temp1=new ArrayList<Double>(60000);
		ArrayList<Double> temp2=new ArrayList<Double>(60000);
                try             
                {         
                        FileInputStream fstream = new FileInputStream("c:/perl/output.txt");
                        DataInputStream datastream = new DataInputStream(fstream);
                        BufferedReader br = new BufferedReader(new InputStreamReader(datastream));
                        String strLine;
                        while ((strLine = br.readLine()) != null)
                                {
                                String temp_strs[] = strLine.split("\t");
				temp1.add(Double.parseDouble(temp_strs[0]);
				temp2.add(Double.parseDouble(temp_strs[1]);
                        }
                        datastream.close();
                }
                catch (Exception e)
                {
            //file not found exception...
                        e.printStackTrace();
                }
		valuePairs=new double[2][temp1.size()];
		//now populate the array
		for(int i=0; i<temp1.size(); i++)
		{
			valuePairs[0][i]=temp1.get(i);
			valuePairs[1][i]=temp2.get(i);
		}
		temp1.clear();//cleanup
		temp2.clear();//
        }
  }
  
  public void drawGraph()
  {
        ReadFile rFile= new ReadFile();
        rFile.fileRead();
        DefaultXYDataset set = new DefaultXYDataset();
        //addseries requires double array
    set.addSeries("Values" , rFile.valuePairs);
    //wrapper class that converts a standard XYDataset, 
    //into an IntervalXYDataset suitable for use in creating XY bar charts
    XYBarDataset barset = new XYBarDataset(set , 0.8);
    JFreeChart chart = ChartFactory.createXYBarChart(
                "coverage depth" , "x" , false , "y" , 
        barset , PlotOrientation.VERTICAL , true , true , false);
    JFrame frame = new JFrame("Graph Showing Coverage values for chromosome-9");
    frame.setContentPane(new ChartPanel(chart));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);   
  }
 
  public static void main(String[] args)
  {
        DisplayGraphics XY = new DisplayGraphics();
        XY.drawGraph();
  }
}

Open in new window

0
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 

Author Comment

by:shragi
ID: 24108708
I got a numbe format exception...at

temp1.add(Double.parseDouble(temp_strs[0]);
temp2.add(Double.parseDouble(temp_strs[1]);

but unable to fix it...can u..
0
 

Author Comment

by:shragi
ID: 24109644
yup i got..it... thnks dude...
0
 
LVL 25

Expert Comment

by:InteractiveMind
ID: 24109872
Replace those lines with

try
{
    temp1.add(Double.parseDouble(temp_strs[0]);
    temp2.add(Double.parseDouble(temp_strs[1]);
}catch(Exception e2){System.out.println(temp_strs[0]+","+temp_strs[1]);}

are they definitely numbers?

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
In this post we will learn how to make Android Gesture Tutorial and give different functionality whenever a user Touch or Scroll android screen.
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question