Results 1 to 6 of 6
  1. #1
    BHCluster is offline Member
    Join Date
    Mar 2008
    Posts
    32
    Rep Power
    0

    Smile Need Help for Dot Plot Graph

    I have a little problem at the moment what I am trying to do is plot a graph from two sequences and plot it onto the jPanel but I can't. I have the gui done and the link to a certain file but can't make sense out of it if somebody knows how to do this please help.

    The two sequences should look like this
    A B C D E F G .....Z
    A
    B
    C
    D
    E
    F
    G
    .
    .
    .
    .
    .
    Z

    An the inputs are going to be letters in stead of numbers so every time the program encounters the same letter on both axis it will put a line like the photo shows.



    File 1
    File 2
    File 3

    and here is my Gui code

    Java Code:
    /****************************************************************/
    /*                      DotPlot	                            */
    /*                                                              */
    /****************************************************************/
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    /**
     * Summary description for DotPlot
     *
     */
    public class DotPlot extends JFrame
    {
    	// Variables declaration
    	private JLabel jLabel1;
    	private JLabel jLabel2;
    	private JLabel jLabel3;
    	private JTextArea jTextArea1;
    	private JScrollPane jScrollPane1;
    	private JTextArea jTextArea2;
    	private JScrollPane jScrollPane2;
    	private JButton jButton1;
    	private JPanel contentPane;
    	//-----
    	private JPanel jPanel1;
    	//-----
    	// End of variables declaration
    
    
    	public DotPlot()
    	{
    		super();
    		initializeComponent();
    		//
    		// Add any constructor code after initializeComponent call
    		//
    
    		this.setVisible(true);
    	}
    
    	/**
    	 * This method is called from within the constructor to initialize the form.
    	 */
    	private void initializeComponent()
    	{
    		jLabel1 = new JLabel();
    		jLabel2 = new JLabel();
    		jLabel3 = new JLabel();
    		jTextArea1 = new JTextArea();
    		jScrollPane1 = new JScrollPane();
    		jTextArea2 = new JTextArea();
    		jScrollPane2 = new JScrollPane();
    		jButton1 = new JButton();
    		contentPane = (JPanel)this.getContentPane();
    		//-----
    		jPanel1 = new JPanel();
    		//-----
    
    		//
    		// jLabel1
    		//
    		jLabel1.setBackground(new Color(105, 188, 246));
    		jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
    		jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
    		jLabel1.setOpaque(true);
    		jLabel1.setText("FASTA Sequences File 1 ");
    		//
    		// jLabel2
    		//
    		jLabel2.setBackground(new Color(105, 188, 246));
    		jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
    		jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
    		jLabel2.setOpaque(true);
    		jLabel2.setText("FASTA Sequences File 2 ");
    		//
    		// jLabel3
    		//
    		jLabel3.setBackground(new Color(105, 188, 246));
    		jLabel3.setHorizontalAlignment(SwingConstants.CENTER);
    		jLabel3.setOpaque(true);
    		jLabel3.setText("Dot-Plot Graph");
    		//
    		// jTextArea1
    		//
    		jTextArea1.setWrapStyleWord(true);
    		//
    		// jScrollPane1
    		//
    		jScrollPane1.setViewportView(jTextArea1);
    		//
    		// jTextArea2
    		//
    		jTextArea2.setLineWrap(true);
    		//
    		// jScrollPane2
    		//
    		jScrollPane2.setViewportView(jTextArea2);
    		//
    		// jButton1
    		//
    		jButton1.setText("Plot the Sequance");
    		jButton1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e)
    			{
    				jButton1_actionPerformed(e);
    			}
    
    		});
    		//
    		// contentPane
    		//
    		contentPane.setLayout(null);
    		addComponent(contentPane, jLabel1, 19,10,249,18);
    		addComponent(contentPane, jLabel2, 18,229,249,18);
    		addComponent(contentPane, jLabel3, 284,11,500,18);
    		addComponent(contentPane, jScrollPane1, 18,29,250,160);
    		addComponent(contentPane, jScrollPane2, 18,247,250,160);
    		addComponent(contentPane, jButton1, 658,422,127,28);
    		addComponent(contentPane, jPanel1, 284,30,500,379);
    		//
    		// jPanel1
    		//
    		jPanel1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		jPanel1.setBorder(BorderFactory.createLineBorder(Color.blue));
    		//
    		// DotPlot
    		//
    		this.setTitle("DotPlot");
    		this.setLocation(new Point(0, 0));
    		this.setSize(new Dimension(800, 486));
    		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    	}
    
    
    	private void addComponent(Container container,Component c,int x,int y,int width,int height)
    	{
    		c.setBounds(x,y,width,height);
    		container.add(c);
    	}
    
    	//
    	// Add any appropriate code in the following Event Handling Methods
    	//
    	private void jButton1_actionPerformed(ActionEvent e)
    	{
    		System.out.println("\njButton1_actionPerformed(ActionEvent e) called.");
    		// Add any handling code here
    
    	}
    
    	//
    	// Add any method code to meet your needs in the following area
    	//
    
    
    	public static void main(String[] args)
    	{
    		JFrame.setDefaultLookAndFeelDecorated(true);
    		JDialog.setDefaultLookAndFeelDecorated(true);
    		try
    		{
    			UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    		}
    		catch (Exception ex)
    		{
    			System.out.println("Failed loading L&F: ");
    			System.out.println(ex);
    		}
    		new DotPlot();
    	}
    
    }
    Your help is appreciated
    Last edited by BHCluster; 04-10-2008 at 04:48 PM.

  2. #2
    CaptainMorgan's Avatar
    CaptainMorgan is offline Moderator
    Join Date
    Dec 2007
    Location
    NewEngland, US
    Posts
    835
    Rep Power
    8

    Default

    From your file list, can you post here separately, lines 65 and 71 of DotPlot.java; and lines 98, 129, 168, 184, 220, and 257 of DotPlotUI.java. It appears the above lines have been cut short by the maximum page width. :(

    Can you elaborate more on your GUI code.. for example, why do you have your GUI code which named after DotPlot.java, and yet you link to a complete DotPlot.java file?
    Vote for the new slogan to our beloved Java Forums! (closes on September 4, 2008)
    Want to voice your opinion on your IDE/Editor of choice? Vote now!
    Got a little Capt'n in you? (drink responsibly)

  3. #3
    BHCluster is offline Member
    Join Date
    Mar 2008
    Posts
    32
    Rep Power
    0

    Default

    Thanks for taking interest in this but I have found this online with the code like it is that's why I don't know how to do it and that's why I am so desperate for this if you know any way around this I would appreciate it.

  4. #4
    CaptainMorgan's Avatar
    CaptainMorgan is offline Moderator
    Join Date
    Dec 2007
    Location
    NewEngland, US
    Posts
    835
    Rep Power
    8

    Default

    BH, actually.... what I did was complete those lines that were cut off saying (floa with: (float)10;

    Those lines that were cut off with strings I just closed the string and then it all compiled and ran. The GUI runs but it requires a "Fasta" file type which I don't have and I assume you'll need to open a graph.

    Best of luck. :)
    Vote for the new slogan to our beloved Java Forums! (closes on September 4, 2008)
    Want to voice your opinion on your IDE/Editor of choice? Vote now!
    Got a little Capt'n in you? (drink responsibly)

  5. #5
    CaptainMorgan's Avatar
    CaptainMorgan is offline Moderator
    Join Date
    Dec 2007
    Location
    NewEngland, US
    Posts
    835
    Rep Power
    8

    Default

    As requested:

    GraphPane

    Java Code:
    /** 
     *  File:         GraphPane.java
     *  Created:      Apr 10, 2008, at 10:54:12 PM
     *
     *  Description:  See the comments before the class below. 
     */
    
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    
    /* This class extends teh JPanel class and is
     * used primarily to contain the Graphical dot-plot
     */
    class GraphPane extends JPanel {
      /* These are the attributes required for this class.
      * Their primary purpose is to fit the graph to the
      * panel.
      */
      int scaleWidth = 600;
      int scaleHeight = 600;
      final int PAD = 20;
      Image scaledImage;
      DotPlot dp;
      String sequence_1 = "";
      String sequence_2 = "";
      int window;
      int threshold;
      /* This is the sole constructor for GraphPane. The
      * class is populted from these initial parameters.
      *
      */
      public GraphPane(String sequence_1, String sequence_2, int window, int threshold)
      {
        this.window = window;
        this.threshold = threshold;
        this.sequence_1 = sequence_1;
        this.sequence_2 = sequence_2;
      }
      // Paints the graph to a panel
      public void paint(Graphics g)
      {
        DotPlot dp = new DotPlot();
        dp = new DotPlot();
        dp.readInGenome(this.sequence_1,this.sequence_2,this.window,this.threshold);
        dp.setDimensions();
        Panel panel = new Panel();
        panel.setBackground(new Color(235,235,235));
        add(panel);
        g.setColor(Color.red);
        dp.draw(panel);
        scaledImage = dp.img.getScaledInstance(scaleWidth,scaleHeight,0);
        g.drawImage(scaledImage,0,0,panel);
      }
    }
    DotPlotUI
    Java Code:
    /** 
     *  File:         DotPlotUI.java
     *  Created:      Apr 10, 2008, at 10:52:47 PM
     *
     *  Description:  See the comments before the class below. 
     */
    
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    import java.awt.event.*;
    
    /* This is the main driver for the Dot-Plot program.
     * Compilation: javac DotPlotUI.java
     * Usage:        java DotPlotUI
     *
     */
    public class DotPlotUI implements ActionListener
    {
      // the following are the components used to make
      // up the application UI
      GraphPane graphPane;
      JTabbedPane tabbedPane;
      TextField tfDirectory = new TextField();
      TextField tfFile = new TextField();
      TextField tfFilter = new TextField();
      FileDialog fd;
      JFrame f;
      final JButton button1;
      final JButton button2;
      final JButton button3;
      TextArea textArea1;
      TextArea textArea2;
      JLabel window_label;
      JTextField window;
      JLabel threshold_label;
      JTextField threshold;
      TextArea status;
      JLabel status_label;
      JPanel pre_plot;
         
      /* The is the sole constructionfor the DotPlotUI
      * In this constructor all the components are added
      * sequentially/
      */
      public DotPlotUI()
      {
        f = new JFrame("Dot-plot Comparative Sequence Analysis");
        f.getContentPane().setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle bounds = env.getMaximumWindowBounds();
        button1 = new JButton("Fasta File 1");
        button2 = new JButton("Fasta File 2");
        button3 = new JButton("Create Dot-plot");
        textArea1 = new TextArea("Fasta File 1", 10,10,TextArea.SCROLLBARS_NONE);
        textArea2 = new TextArea("Fasta File 2", 10,10,TextArea.SCROLLBARS_NONE);
        status = new TextArea("", 10,bounds.width,TextArea.SCROLLBARS_VERTICAL_ONLY);
        status.setEditable(false);
        window_label = new JLabel("Windows Size");
        window = new JTextField(10);
        threshold_label = new JLabel("Threshold Size");
        threshold = new JTextField(10);
        status_label = new JLabel("Process Status/Error Info");
        pre_plot = new JPanel();
        pre_plot.setBackground(new Color(235,235,235));
        f.getContentPane().add(textArea1);
        f.getContentPane().add(button1);
        f.getContentPane().add(textArea2);
        f.getContentPane().add(button2);
        f.getContentPane().add(window_label);
        f.getContentPane().add(window);
        f.getContentPane().add(threshold_label);
        f.getContentPane().add(threshold);
        f.getContentPane().add(button3);
        f.getContentPane().add(status);
        f.getContentPane().add(status_label);
        f.getContentPane().add(pre_plot);
        button1.addActionListener(this);
        button2.addActionListener(this);
        window.addActionListener(this);
        threshold.addActionListener(this);
        button3.addActionListener(this);
        textArea1.setBounds(10,10,182,150);
        Dimension size = button1.getPreferredSize();
        button1.setBounds(10,170,size.width,size.height);
        textArea2.setBounds(10,180+size.height,182,150);
        size = button1.getPreferredSize();
        button2.setBounds(10,340+size.height,size.width,size.height);
        size = threshold_label.getPreferredSize();
        window_label.setBounds(10,420+size.height,size.width,size.height );
        window.setBounds(10+size.width+10,420+size.height,size.width,size.height );
        threshold_label.setBounds(10,445+size.height,size.width,size.height );
        threshold.setBounds(10+size.width+10,445+size.height,size.width,size.height );
        size = button3.getPreferredSize();
        button3.setBounds(10,485+size.height,size.width+5,size.height+5);
        button3.setBackground(new Color(153,153,153));
        size = status_label.getPreferredSize();
        //status_label.setBounds((int)((bounds.width/2)-(size.width/2)),bounds.height-115,size);
        status.setBounds(10,bounds.height-100,bounds.width-30,65);
        status.setBackground(new Color(255,255,204));
        status.setForeground(Color.red);
        pre_plot.setBounds(300,10, 600, 600);
        f.setSize((int)bounds.getWidth(),(int)bounds.getHeight());
        f.setLocation(0,0);
        f.setVisible(true);
      }
      
      /* This handles all action events to the Application UI.
      * It poulates the Fasta File TextFields, and ultimatley
      * produces the dot-plot.
      */
      public void actionPerformed(ActionEvent evt)
      {
        // load the first fasta file
        if ((evt.getActionCommand()).equals("Fasta File 1")) {
          fd = new FileDialog(f, null, FileDialog.LOAD);
          fd.setDirectory(".\\");
        }
        // load the second fasta file
        else if ((evt.getActionCommand()).equals("Fasta File 2"))
        {
          fd = new FileDialog(f, null, FileDialog.LOAD);
          fd.setDirectory(".\\");
        }
        // display the dot-plot of the previously loaded data
        else if ((evt.getActionCommand()).equals("Create Dot-plot"))
        {
          graphPane = new GraphPane(textArea1.getText(),textArea2.getText(),getWindow(),getWindow());
          f.getContentPane().add(graphPane);
          graphPane.setBounds(300,10, 600, 600);
          // display program status
          status.append("Info: Dot-plot sequence analysis diagram created!");
        }
        // Populate textArea_1 with sequences
        if ((evt.getActionCommand()).equals("Fasta File 1"))
        {
          fd.show();
          String sequence = this.readFile(fd.getDirectory()+fd.getFile());
          textArea1.replaceRange(sequence,0,textArea1.getText().length());
          // display program status
          status.append("Info: Fast File 1 sequence data loaded, " + sequence.length()
            + " characters in length.\n");
        }
        // Populate textArea_2 with sequences
        else if((evt.getActionCommand()).equals("Fasta File 2"))
        {
          fd.show();
          String sequence = this.readFile(fd.getDirectory()+fd.getFile());
          textArea2.replaceRange(sequence,0,textArea2.getText().length());
          // display program status
          status.append("Info: Fast File 2 sequence data loaded, " + sequence.length()
            +" characters in length.\n");
        }
      }
      
      /* This method is used to collect the window size in the
      * text-fields. If they are empty or erroneous a default value
      * of 100 is chosen, and a warning message outputted.
      */
      public int getWindow()
      {
        String win_val = window.getText();
        if(win_val.equals("") || win_val == null)
        {
          status.append("Warning: No window size selected, using default window size of 10");
          return 100;
        }
        win_val.trim();
        boolean is_number = true;
        for(int i=0; i<win_val.length(); i++)
        {
          if(Character.isDigit(win_val.charAt(i)) == false)
          {
            is_number = false;
            break;
          }
        }
        if(is_number == false)
        {
          status.append("Error: The chosen window size is not a number, using default windoow");
          return 100;
        }
        else
        {
          status.append("Info: Window size set at: " + win_val + ".\n");
          return Integer.parseInt(win_val);
        }
      }
      
      /* This method is used to collect the threshold size in the
      * text-fields. If they are empty or erroneous a default value
      * of 100 is chosen, and a warning message outputted.
      */
      public int getThreshold()
      {
        String thres_val = window.getText();
        if(thres_val.equals("") || thres_val == null)
        {
          status.append("Warning: No threshold size selected, using default threshold size");
          return 100;
        }
        thres_val.trim();
        boolean is_number = true;
        for(int i=0; i<thres_val.length(); i++)
        {
          if(Character.isDigit(thres_val.charAt(i)) == false)
          {
            is_number = false;
            break;
          }
        }
        if(is_number == false)
        {
          status.append("Error: The chosen threshold size is not a number, using default th?");
          return 100;
        }
        else
        {
          status.append("Info: Threshold size set at: " + thres_val + ".\n");
          return Integer.parseInt(thres_val);
        }
      }
      
      /* This method reads the genomic sequences from the file
      * passed in the argument. The file must be of FASTA formatting.
      */
      public String readFile(String file)
      {
        BufferedReader inFile = null;
        String sequence = "";
        try{
          inFile = new BufferedReader(new FileReader(file));
          String str = null;
          while((str = inFile.readLine()) != null)
          {
            if(!str.equals(""))
            {
              if(str.substring(0,1).equals(">"))
              {
                while((str = inFile.readLine()) != null && !str.equals(""))
                  sequence = sequence.concat(str);
              }
            }
          }
        }
        catch (IOException e)
        {
          System.out.println("INPUT ERROR: Input file not recognized at DotPlotUI.readFile");
          System.exit(1);
        }
        return sequence;
      }
      
      public static void main(String[] args)
      {
        new DotPlotUI();
      }
    }
    DotPlot
    Java Code:
    /** 
     *  File:         DotPlot.java
     *  Created:      Apr 10, 2008, at 10:51:43 PM
     *
     *  Description:  See the comments before the class below. 
     */
    
    import  java.awt.*;
    import  javax.swing.*;
    import  java.util.*;
    import  java.io.*;
    
    /* Class DotPlot works out the technical aspects of the graph
     * by computing the thresholds, window size and where sequences match.
     * It is also responsible for drawing the points of the Dot-plot.
     */
    class DotPlot
    {
      // Required attibutes including the Image to be displayed,seq_1, seq_2
      // window and threshold vlaues
      Image img;
      String seq1 = null;
      String seq2 = null;
      int windowSize = 0;
      int threshold = 0;
      Vector vecPoints = new Vector();
      int index = 0;
      int noOfCoors = 0;
      int imageWidth = 1000;
      int imageHeight = 1000;
      int scale = 1000;
      // Initialise the classes attributes
      public void readInGenome(String seq1, String seq2, int windowSize, int threshold)
      {
        this.windowSize = windowSize;
        this.threshold = threshold;
        this.seq1 = seq1;
        this.seq2 = seq2;
      }
      
      /* Sets up the dimensions for the to be
      * displayed image depending on whether the sequence
      * is longer, shoter or equla to the default image dimensions
      */
      public void setDimensions()
      {
        if(seq1.length() == seq2.length())//Both seqs same length
        {
          if(seq1.length() > scale)//Both greater than scale
          {
            imageWidth = scale;
            imageHeight = scale;
          }
          else//Both less than scale
          {
            imageWidth = seq1.length();
            imageHeight = seq2.length();
          }
        }
        else//Different sized seqs
        {
          if(seq1.length() < scale && seq2.length() < scale)//seq_1 = seq_2
          {
            imageWidth = seq1.length();
            imageHeight = seq2.length();
          }
          else if(seq1.length() > seq2.length())//seq_1 > seq_2
          {
            imageWidth = scale;
            float fHeight = (float) ( (float)seq2.length()/(float)seq1.length() ) * (float)10;
            imageHeight = (int) fHeight;
          }
          else if(seq2.length() > seq1.length())//seq_2 > seq_1
          {
            imageHeight = scale;
            float fWidth = (float) ( (float)seq1.length()/(float)seq2.length() ) * (float)10;
            imageWidth = (int) fWidth;
          }
        }
      }
      
      /* Calculates if the sequential seegment starting
       * at 'a' and ending at 'b' meeets the current
       * threshold
       */
      public boolean satisfiesThreshold(int a, int b)
      {
        int outCount = 0;
        int matchCount = 0;
        for(int d=1; d<=windowSize; d++)
        {
          if(inBounds(a-d,b-d))
          {
            if(isMatch(a-d,b-d))
              matchCount++;
          }
          else
            outCount++;
          if(inBounds(a+d,b+d))
          {
            if(isMatch(a+d,b+d))
              matchCount++;
          }
          else
            outCount++;
          }
          if(matchCount >= threshold)
            return true;
          else
            return false;
      }
      
      /* Check if the base indexes match
      * True or False is returned.
      */
      public boolean isMatch(int a, int b)
      {
        String base1 = seq1.substring(a,a+1);
        String base2 = seq2.substring(b,b+1);
        if(base1.equals(base2))
          return true;
        else return false;
      }
      
      /* This makes sure we don't run over bounds with our
      * windowing.
      * True or False is returned.
      */
      public boolean inBounds(int a, int b)
      {
        if(a < 0 || b < 0 || a > seq1.length()-1 || b > seq2.length()-1)
          return false;
        else return true;
      }
      
      /* Uses java.Grphics to draw the points
      * tothe screen using the fore-mentioned
      * integers a and b
      */
      public void drawPoint(int a, int b, Graphics g)
      {
        int xcoor = 0;
        int ycoor = 0;
        if(seq1.length() > imageWidth)
        {
          float xx = (float) ( (float)a/(float)seq1.length() * (float)imageWidth );
          xcoor = (int) xx;
        }
        else
          xcoor = a;
        if(seq2.length() > imageHeight)
        {
          float yy = (float) ( (float)b/(float)seq2.length() * (float)imageHeight );
          ycoor = (int)yy;
        }
        else
          ycoor = b;
        g.drawLine(xcoor,ycoor,xcoor,ycoor);
      }
      
      /* Uses java.Graphics to set the points
      * for the Gragh. this is somewhat of a culmination
      * of methods.
      */
      public void setUpPoints(Graphics g)
      {
        String base1 = null;
        String base2 = null;
        for(int i=0; i<seq1.length(); i++)
        {
          for(int j=0; j<seq2.length(); j++)
          {
            base1 = seq1.substring(i,i+1);
            base2 = seq2.substring(j,j+1);
            if(base1.equals(base2))
            {
              if(satisfiesThreshold(i,j))
                drawPoint(i,j,g);
            }
          }
        }
      }
    
      public void draw(Component c)
      {
        img = c.createImage(imageWidth,imageHeight);
        Graphics g = img.getGraphics();
        g.setColor(new Color(38,0,133));
        setUpPoints(g);
      }
    }
    Vote for the new slogan to our beloved Java Forums! (closes on September 4, 2008)
    Want to voice your opinion on your IDE/Editor of choice? Vote now!
    Got a little Capt'n in you? (drink responsibly)

  6. #6
    BHCluster is offline Member
    Join Date
    Mar 2008
    Posts
    32
    Rep Power
    0

Similar Threads

  1. ECG plot in a textfile
    By samson in forum Java 2D
    Replies: 13
    Last Post: 01-28-2012, 05:02 PM
  2. Plot 2D graph in Java from RS-232 data
    By spratana in forum Java 2D
    Replies: 4
    Last Post: 02-11-2009, 07:49 PM
  3. Java chart & graph lib
    By saturdaybugs in forum Java 2D
    Replies: 1
    Last Post: 04-24-2008, 02:59 PM
  4. Graph DPS and BFS implementation
    By hey in forum New To Java
    Replies: 1
    Last Post: 01-09-2008, 10:19 PM
  5. Help with graph code example
    By silvia in forum Java 2D
    Replies: 1
    Last Post: 07-29-2007, 11:16 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •