NAME

R::YapRI::Graph::Simple.pm

A module to create simple graphs using R through R::YapRI::Base

SYNOPSIS

  use R::YapRI::Base;
  use R::YapRI::Data::Matrix;
  use R::YapRI::Graph::Simple;

  ## Create rbase:

  my $rbase = R::YapRI::Base->new();

  ## Create the data matrix

  my $ymatrix = R::YapRI::Data::Matrix->new({
    name     => 'data1',
    coln     => 10,
    rown     => 2, 
    colnames => ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10'],
    rownames => ['X', 'Y'],
    data     => [qw/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /],
  });

  ## Create the graph with the graph arguments, a barplot with two series (rows)
  ## of data per group (cols).

  my $rgraph = R::YapRI::Graph::Simple->new({
    rbase  => $rbase,
    rdata  => { height => $ymatrix },
    grfile => "MyFile.bmp",
    device => { bmp => { width => 600, height => 600 } },
    sgraph => { barplot => { beside => 'TRUE',
			     main   => 'MyTitle',
			     xlab   => 'x_axis_label',
			     ylab   => 'y_axis_label',
			     col    => ["dark red", "dark blue"],
              } 
    },
  });

  $rgraph->build_graph('GRAPHBLOCK1');
  my ($graphfile, $resultfile) = $rgraph->run_graph()

DESCRIPTION

This module is a wrapper of R::YapRI::Base to create simple graphs using R, with the following features:

1) It loads the data from Perl to R using R::YapRI::Data::Matrix.

2) It works with blocks, so it can define a block in the beginning of the module/script and use as base to add the data and the graph creation commands.

3) It runs the following R commands acording the different accessors:

- device: bmp, jpeg, tiff, png, postscript or pdf.

- grparam: par.

- sgraph (high-level plotting commands): plot, pairs, hist, dotchart, barplot, pie or boxplot.

- gritems (low-level plotting commands): points, lines, abline, polygon, legend, title and axis.

4) It uses two commands to create the file with the graph:

+ build_graph(), to write into the R::YapRI::Base block the R commands.

+ run_graph(), to executate the R commands from the block.

AUTHOR

Aureliano Bombarely <aurebg@vt.edu>

CLASS METHODS

The following class methods are implemented:

(*) CONSTRUCTORS:

constructor new

Usage: my $rgraph = R::YapRI::Graph->new($arguments_href);

Desc: Create a new R graph object

Ret: a R::YapRI::Graph object

Args: A hash reference with the following parameters:
      rbase   => A R::YapRI::Base object
      rdata   => A hash reference with key=R_obj_name, 
                                       value=R::YapRI::Data::Matrix object
      grfile  => A filename
      device  => A hash reference with: key='grDevice name'
                                        value=HASHREF. with grDevice args.
      grparam => a hash reference with: key='par'
                                        value=HASHREF. with par values.
      sgraph  => A hash reference with: key='high-level plotting function'
                                        value=HASHREF. with plotting args
      gritems => An array ref. of hash references with:
                              key='R low-level plotting command'
                              val='hash ref. with args. for that command'
      
      
      
Side_Effects: Die if the argument used is not a hash or its values arent 
              right.

Example: ## Default method:
            my $rih = R::YapRI::Graph->new();
        
        

(*) ACCESSORS:

get/set_rbase

Usage: my $rbase = $rgraph->get_rbase();
       $rgraph->set_rbase($rbase);

Desc: Get or set the rbase (R::YapRI::Base object) accessor

Ret: Get: $rbase, a R::YapRI::Base object
     Set: none

Args: Get: none
      Set: $rbase, a R::YapRI::Base object
      
Side_Effects: Get: None
              Set: Die if no rbase object is supplied or if it isnt a 
                   R::YapRI::Base object

Example: my $rbase = $rgraph->get_rbase();
         $rgraph->set_rbase($rbase);
        
        

get/set_grfile

Usage: my $grfile = $rgraph->get_grfile();
       $rgraph->set_grfile($grfile);

Desc: Get or set the grfile accessor.
      It always will overwrite the filename argument for grDevice.

Ret: Get: $grfile, a scalar, a filename
     Set: none

Args: Get: none
      Set: $grfile, a scalar, filename
      
Side_Effects: Get: None
              Set: Die if no grfile is supplied
                   Overwrite filename for grDevice

Example: my $grfile = $rgraph->get_grfile();
         $rgraph->set_grfile('myfile.bmp');
        
        

get/set_rdata

Usage: my $rdata_href = $rgraph->get_rdata();
       $rgraph->set_rdata($rdata_href);

Desc: Get or set the rdata accessor

Ret: Get: $rdata_href, a hash ref. with key   = R.obj.name, 
                                        value = R::YapRI::Data::Matrix
     Set: none

Args: Get: none
      Set: $rdata_href, a hash ref. with key   = R.obj.name, 
                                         value = R::YapRI::Data::Matrix
      
Side_Effects: Get: None
              Set: Die if arg. supplied is not a hash reference or it dont
                   have R::YapRI::Data::Matrix objects.

Example: my %rdata = %{$rgraph->get_rdata()};
         $rgraph->set_rdata({ ra => R::YapRI::Data::Matrix->new() });
                  

get/set_device

Usage: my $device_href = $rgraph->get_device();
       $rgraph->set_device($device_href);

Desc: Get or set the device accessor.
      Permited grDevices: bmp, tiff, jpeg, png, pdf, postscript 

Ret: Get: $device_href, a hash ref. with key=R.grDevice (bmp, tiff...)
                                         val=HASHREF with arguments
     Set: none

Args: Get: none
      Set: $device_href, a hash ref. with key=R.grDevice (bmp, tiff...)
                                          val=HASHREF with arguments
      
Side_Effects: Get: None
              Set: Die if no hash ref. is supplied.
                   Die if grDevice isnt a permited device.
                   Die if the hashref. arguments isnt a hashref.
                   filename argument always will be overwrite for grfile
                   accessor.

Example: my $device_href = $rgraph->get_device();
         $rgraph->set_device({ tiff => {} });
        
        

get/set_grparams

Usage: my $grparams_href = $rgraph->get_grparams();
       $rgraph->set_grparams($grparams_href);

Desc: Get or set the graphical parameter accessor.
      Use help(par) at the R terminal for more info.

Ret: Get: $grparam_href, a hash reference (see below)
     Set: none

Args: Get: none
      Set: $grparam_href, a hash reference.

Side_Effects: Get: None
              Set: Die if no graphical parameter argument is supplied.
                   (empty hashref. is permited)
                   Die if it isnt a hash reference
                   Die if it doesnt use a permited parameter

Example: my %grparams = %{$rgraph->get_grparam()};
         $rgraph->set_grparams({ par => { cex => 0.5 } });
        
        

get/set_sgraph

Usage: my $sgraph_href = $rgraph->get_sgraph();
       $rgraph->set_sgraph($sgraph_href);

Desc: Get or set the simple graph accessor.
      Permited high-level plot commands are: plot, pairs, hist, dotchart, 
      barplot, pie and boxplot.

Ret: Get: $sgraph_href, a hashref. with key=high-level plot command.
                                        val=HASHREF. with plot arguments.
     Set: none

Args: Get: none
      Set: $sgraph_href, a hashref. with key=high-level plot command.
                                        val=HASHREF. with plot arguments.
      
Side_Effects: Get: None
              Set: Die if no sgraph is supplied or if it isnt the permited
                   list.
                   Die if argument hashref. isnt a hashref.

Example: my $sgraph = $rgraph->get_sgraph();
         $rgraph->set_sgraph({ barplot => { beside => 'TRUE' } } );
        
        

get/set_gritems

Usage: my $gritems_href = $rgraph->get_gritems();
       $rgraph->set_gritems($gritems_href);

Desc: Get or set the graph items arguments (low-level plotting commands) 
      accessor.
      Use help() with a concrete gritem at the R terminal for more info.

Ret: Get: $gritems, an array reference of hash references with 
                       key=R low-level plotting function
                       val=args. for that low-level func.
     Set: none

Args: Get: none
      Set: $gritems, an array reference of hash references with:
                       key=R low-level plotting function
                       val=args. for that low-level func.

Side_Effects: Get: None
              Set: Die if no gritem argument is supplied (empty hash ref.
                   can be supplied)
                   Die if it isnt a array reference.
                   Die if rbase arg. was set before.
                   Die if the argument used it is not in the argument
                   permited list. 
                   Die if the arguments used for the low-level plotting
                   function are not in the permited arguments, get using
                   R::YapRI::Base::r_function_args function + additional func.
                   for specific cases (example: col.main or cex.sub for title)

Example: my %gritems = %{$rgraph->get_gritems()};
         $rgraph->set_gritems([ 
                                { points => { x => [2, 5], col => "red" },    
                                { legend => { x  => 25, 
                                              y  => 50, 
                                              leg => ["exp1", "exp2", "exp3"],
                                              bg => "gray90" } 
                              ]);
        
        

is_device_enabled

Usage: my $enabled = $rgraph->is_device_enabled($device_name, $block)

Desc: Check if the graphic device is enabled for the current block

Ret: 1 for enabled, 0 for disabled

Args: $device_name, a R graphical device name
      $block, a block name to check, for a concrete rbase object

Side_Effects: Die if no deice_name or block are supplied.
              Die if the block supplied doesnt exists in the rbase object

Example: if ($rgraph->is_device_enabled('bmp', 'BMPE')) {
                print "R Device is enabled\n";
         }
            

_rbase_check

Usage: $rgraph->_rbase_check();

Desc: Check if Rbase was set. Die if isnt set.

Ret: $rbase, Rbase object.

Args: None

Side_Effects: None

Example: $rgraph->_rbase_check();
            

_block_check

Usage: my $block = $rgraph->_block_check($block);

Desc: Check if a block exists into rbase object.
      Create a new block if doesnt exists with that name.
      Create a new block with name 'GRAPH_BUILD_XXXX if block isnt defined

Ret: $block, a block name.

Args: None

Side_Effects: None

Example: my $block = $rgraph->_block_check($block);
            

_sgraph_check

Usage: my $sgraph = $rgraph->_sgraph_check();

Desc: Check if a sgraph exists (accessor isnt empty) into rgraph object.
      Die if is empty.

Ret: $sgraph, sgraph name for high-level plotting function

Args: None

Side_Effects: If there are more than one sgraph, order them and return 
              the first one.

Example: my $sgraph = $rgraph->_sgraph_check();
            

_rdata_check

Usage: my $robj = $rgraph->_rdata_check($primary_data_R);

Desc: Check if rdata exists (accessor isnt empty) into rgraph object.
      Die if is empty.

Ret: $robj, a R object name for primary data (data used by the graph)

Args: $primary_data_R, according the simple graph used, the name of the
      default primary data (for example: 'x' for plot or 'height' for barplot)
      $mincol, min. number of columns for this method.
      $maxcol, max. number of columns for this method.

Side_Effects: If there are more than one rdata, it will try to match the
              R object name with the primary graph data

Example: my $robj = $rgraph->_rdata_check('height', 1, undef);
            

_rdata_loader

Usage: $rgraph->_rdata_loader($block);

Desc: Check and load the rdata

Ret: None

Args: $block, a block name for rbase

Side_Effects: Die if no block is used.
              Die if block doesnt exist in the current rbase
              Add the input R data object to sgraph hashref. If the sgraph
              args. are a hash ref. it will convert them in a array ref. to
              keep the order, and it will delete the arg. that refer to the
              input data.

Example: $rgraph->_rdata_loader($block);
            

build_graph

Usage: my $block = $rgraph->build_graph($block);

Desc: A function to build the graph and return the block name.

Ret: $block, the name of the block where all the commands have been printed

Args: $block, a base block to add all the commands to create the graph

Side_Effects: Die if some of the accessors are empty

Example: my $block = $rgraph->build_graph();
         $rgraph->build_graph("GRAPHBLOCK1");
            

run_graph

Usage: my ($filegraph, $fileresults) = $rgraph->run_graph();

Desc: A wrapper function to use run_commands over a concrete graph block

Ret: $filegraph, the name of the graph file 
     $fileresults, with the result of run all the R commans of this block

Args: None

Side_Effects: Die if some of the accessors are empty.
              Return the filename for the graph from the grfile accessor

Example: my ($filegraph, $fileresults) = $rgraph->build_graph();
            

ACKNOWLEDGEMENTS

Lukas Mueller

Robert Buels

Naama Menda

Jonathan "Duke" Leto

COPYRIGHT AND LICENCE

Copyright 2011 Boyce Thompson Institute for Plant Research

Copyright 2011 Sol Genomics Network (solgenomics.net)

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.