The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

SVG::Graph - Visualize your data in Scalable Vector Graphics (SVG) format.

SYNOPSIS

use SVG::Graph;
use SVG::Graph::Data;
use SVG::Graph::Data::Datum;

#create a new SVG document to plot in...
my $graph = SVG::Graph->new(width=>600,height=>600,margin=>30);

#and create a frame to hold the data/glyphs
my $frame = $graph->add_frame;

#let's plot y = x^2
my @data = map {SVG::Graph::Data::Datum->new(x=>$_,y=>$_^2)}
               (1,2,3,4,5);
my $data = SVG::Graph::Data->new(data => \@data);

#put the xy data into the frame
$frame->add_data($data);

#add some glyphs to apply to the data in the frame
$frame->add_glyph('axis',        #add an axis glyph
  'x_absolute_ticks' => 1,       #with ticks every one
                                 #unit on the x axis
  'y_absolute_ticks' => 1,       #and ticks every one
                                 #unit on the y axis

  'stroke'           => 'black', #draw the axis black
  'stroke-width'     => 2,       #and 2px thick
);

$frame->add_glyph('scatter',     #add a scatterplot glyph
  'stroke' => 'red',             #the dots will be outlined
                                 #in red,
  'fill'   => 'red',             #filled red,
  'fill-opacity' => 0.5,         #and 50% opaque
);

#print the graphic
print $graph->draw;

DESCRIPTION

SVG::Graph is a suite of perl modules for plotting data. SVG::Graph currently supports plots of one-, two- and three-dimensional data, as well as N-ary rooted trees. Data may be represented as:

Glyph Name	Dimensionality supported
         	1d	2d	3d	tree
--------------------------------------------------------
Axis				x
Bar Graph		x
Bubble Plot			x
Heatmap Graph			x
Line Graph		x
Pie Graph	x
Scatter Plot		x
Spline Graph		x
Tree					x

SVG::Graph 0.02 is a pre-alpha release. Keep in mind that many of the glyphs are not very robust.

PLOTTING

You need to create a SVG::Graph::Frame instance from the parent SVG::Graph instance for each set of data to be plotted. Datasets can be hierarchical, and to represent this, SVG::Graph::Frame instances can themselves contain subframes. SVG::Graph::Frame can contain:

- multiple subframes as instances of SVG::Graph::Frame
- a single SVG::Graph::Data instance
- multiple SVG::Graph::Glyph instances with which to render
  the attached SVG::Graph::Data instance, and all SVG::Graph::Data
  instances attached to SVG::Graph::Frame subinstances

See SVG::Graph::Frame and SVG::Graph::Glyph for details.

ONE DATA SET

1. create an SVG::Graph instance
2. create an SVG::Graph::Frame instance by calling
   SVG::Graph::add_frame();
3. create an SVG::Graph::Data instance, containing
   an SVG::Graph::Data::Datum instance for each data point.
4. Attach the SVG::Graph::Data instance to your SVG::Graph::Frame
   using SVG::Graph::Frame::add_data();
5. Attach glyphs to the SVG::Graph::Frame instance using
   SVG::Graph::Frame::add_glyph();
6. Call SVG::Graph::draw();

MULTIPLE DATA SETS

1. create an SVG::Graph instance
2. create an SVG::Graph::Frame instance by calling
   SVG::Graph::add_frame();
3. create an SVG::Graph::Data instance, containing
   an SVG::Graph::Data::Datum instance for each data point.
4. Attach the SVG::Graph::Data instance to your SVG::Graph::Frame
   using SVG::Graph::Frame::add_data();
5. Attach glyphs to the SVG::Graph::Frame instance using
   SVG::Graph::Frame::add_glyph();
6. repeat [2-5] for each additional data set to be added.
   add_frame() can be called on SVG::Graph to add top-level data
   sets, or SVG::Graph::Frame to add hierarchical data sets.
7. Call SVG::Graph::draw();

FEEDBACK

Send an email to the svg-graph-developers list. For more info, visit the project page at http://www.sf.net/projects/svg-graph

AUTHORS

Allen Day,      <allenday@ucla.edu>
Chris To,       <crsto@ucla.edu>

CONTRIBUTORS

James Chen,     <chenj@seas.ucla.edu>
Brian O'Connor, <boconnor@ucla.edu>

SEE ALSO

SVG

new

Title   : new
Usage   : my $graph = SVG::Graph->new(width=>600,
                                      height=>600,
                                      margin=>20);
Function: creates a new SVG::Graph object
Returns : a SVG::Graph object
Args    : width => the width of the SVG 
          height => the height of the SVG
          margin => margin for the root frame

init

Title   : init
Usage   :
Function:
Example :
Returns : 
Args    :

width

Title   : width
Usage   : $obj->width($newval)
Function: 
Example : 
Returns : value of width (a scalar)
Args    : on set, new value (a scalar or undef, optional)

height

Title   : height
Usage   : $obj->height($newval)
Function: 
Example : 
Returns : value of height (a scalar)
Args    : on set, new value (a scalar or undef, optional)

margin

Title   : margin
Usage   : $obj->margin($newval)
Function: 
Example : 
Returns : value of margin (a scalar)
Args    : on set, new value (a scalar or undef, optional)

svg

Title   : svg
Usage   : $obj->svg($newval)
Function: 
Example : 
Returns : value of svg (a scalar)
Args    : on set, new value (a scalar or undef, optional)

add_frame

Title   : add_frame
Usage   : my $frame = $graph->add_frame
Function: adds a Frame to the current Graph
Returns : a SVG::Graph::Frame object
Args    : a hash.  usable keys:
            frame_transform (optional)
              'top' default orientation
              'bottom' rotates graph 180 deg (about the center)
              'right' points top position towards right
              'left' points top position towards left

frames

Title   : frames
Usage   : get/set
Function:
Example :
Returns : 
Args    :

xoffset

Title   : xoffset
Usage   : $obj->xoffset($newval)
Function: 
Example : 
Returns : value of xoffset (a scalar)
Args    : on set, new value (a scalar or undef, optional)

yoffset

Title   : yoffset
Usage   : $obj->yoffset($newval)
Function: 
Example : 
Returns : value of yoffset (a scalar)
Args    : on set, new value (a scalar or undef, optional)

draw

Title   : draw
Usage   : $graph=>draw
Function: depends on child glyph implementations 
Returns : xmlifyied SVG object
Args    : none