| SVG-Graph documentation | Contained in the SVG-Graph distribution. |
SVG::Graph - Visualize your data in Scalable Vector Graphics (SVG) format.
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;
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.
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.
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();
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();
Send an email to the svg-graph-developers list. For more info, visit the project page at http://www.sf.net/projects/svg-graph
Allen Day, <allenday@ucla.edu> Chris To, <crsto@ucla.edu>
James Chen, <chenj@seas.ucla.edu> Brian O'Connor, <boconnor@ucla.edu>
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
Title : init Usage : Function: Example : Returns : Args :
Title : width Usage : $obj->width($newval) Function: Example : Returns : value of width (a scalar) Args : on set, new value (a scalar or undef, optional)
Title : height Usage : $obj->height($newval) Function: Example : Returns : value of height (a scalar) Args : on set, new value (a scalar or undef, optional)
Title : margin Usage : $obj->margin($newval) Function: Example : Returns : value of margin (a scalar) Args : on set, new value (a scalar or undef, optional)
Title : svg Usage : $obj->svg($newval) Function: Example : Returns : value of svg (a scalar) Args : on set, new value (a scalar or undef, optional)
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
Title : frames Usage : get/set Function: Example : Returns : Args :
Title : xoffset Usage : $obj->xoffset($newval) Function: Example : Returns : value of xoffset (a scalar) Args : on set, new value (a scalar or undef, optional)
Title : yoffset Usage : $obj->yoffset($newval) Function: Example : Returns : value of yoffset (a scalar) Args : on set, new value (a scalar or undef, optional)
Title : draw Usage : $graph=>draw Function: depends on child glyph implementations Returns : xmlifyied SVG object Args : none
| SVG-Graph documentation | Contained in the SVG-Graph distribution. |
package SVG::Graph;
use SVG; use SVG::Graph::Frame; use Data::Dumper; use strict; our $VERSION = '0.02';
sub new{ my ($class,@args) = @_; my $self = bless {}, $class; $self->init(@args); return $self; }
sub init{ my($self, %args) = @_; foreach my $arg (keys %args){ my $meth = $arg; $self->$meth($args{$arg}); } #allow passing of an existing SVG if(!$self->svg){ $self->svg(SVG->new(xmlns=>"http://www.w3.org/2000/svg",width=>$self->width,height=>$self->height)); } }
sub width{ my $self = shift; return $self->{'width'} = shift if @_; return $self->{'width'}; }
sub height{ my $self = shift; return $self->{'height'} = shift if @_; return $self->{'height'}; }
sub margin{ my $self = shift; return $self->{'margin'} = shift if @_; return $self->{'margin'}; }
sub svg{ my $self = shift; return $self->{'svg'} = shift if @_; return $self->{'svg'}; }
sub add_frame{ my ($self,%args) = @_; my $margin = $self->margin || 0; my $height = $self->height || 0; my $width = $self->width || 0; my $xoffset = $self->xoffset || 0; my $yoffset = $self->yoffset || 0; my $frame = SVG::Graph::Frame->new(svg=>$self, xoffset=>$xoffset + $margin, yoffset=>$yoffset + $margin, xsize=>$width - (2 * $margin), ysize=>$height - (2 * $margin), frame_transform=>$args{frame_transform} ); #print STDERR Dumper($frame); push @{$self->{frames}}, $frame; return $frame; }
sub frames{ my ($self,@args) = @_; return $self->{frames} ? @{$self->{frames}} : (); }
sub xoffset{ my $self = shift; return $self->{'xoffset'} = shift if @_; return $self->{'xoffset'}; }
sub yoffset{ my $self = shift; return $self->{'yoffset'} = shift if @_; return $self->{'yoffset'}; }
sub draw{ my ($self,@args) = @_; foreach my $frame ($self->frames){ $frame->draw; } return $self->svg->xmlify; } 1; __END__