Graph(3pm)
πΈ Graph(3pm) β like, the SVG::Graph manual page, but make it make sense π
okay bestie, so this is a page from the User Contributed Perl Documentation (yes, that whole collection β¨), and it's about SVG::Graph. it's giving "i make pretty pictures out of your numbers" and honestly? iconic. keep reading, i promise it's not that deep π«Ά
β¨ NAME β¨
SVG::Graph β Visualize your data in Scalable Vector Graphics (SVG) format. literally what it says on the tin, no cap π
π SYNOPSIS π
here's the whole vibe in code, copy it, run it, be obsessed:
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;
see how every line has a lil comment? whoever wrote this ate. π₯
π¦ DESCRIPTION π¦
so SVG::Graph is, like, a whole suite of perl modules for plotting your data. main character energy honestly π
currently it supports plots of one-, two- and three-dimensional data, plus N-ary rooted trees. and your data can be represented as... okay bestie, here's the tea, the original had a lil table and i'm giving you the same info as a list because tables are so 2010:
- Axis β 3d
- Bar Graph β 2d
- Bubble Plot β 3d
- Heatmap Graph β 3d
- Line Graph β 2d
- Pie Graph β 1d
- Scatter Plot β 2d
- Spline Graph β 2d
- Tree β tree
(columns were 1d / 2d / 3d / tree, and the lil x told you which one each glyph does, iykyk π)
heads up bestie:SVG::Graph0.02is a pre-alpha release. keep in mind that many of the glyphs are not very robust. fr fr, don't be surprised if something goes sideways π
π PLOTTING π
okay so here's the whole deal: for each set of data you wanna plot, you need to create an SVG::Graph::Frame instance from the parent SVG::Graph instance. periodt.
datasets can be hierarchical, and to represent that, SVG::Graph::Frame instances can themselves contain subframes. so a SVG::Graph::Frame can contain:
- multiple subframes as instances of
SVG::Graph::Frame - a single
SVG::Graph::Datainstance - multiple
SVG::Graph::Glyphinstances with which to render the attachedSVG::Graph::Datainstance, and allSVG::Graph::Datainstances attached toSVG::Graph::Framesubinstances
for the deets, go see SVG::Graph::Frame and SVG::Graph::Glyph β¨
πΈ ONE DATA SET πΈ
- create an
SVG::Graphinstance - create an
SVG::Graph::Frameinstance by callingSVG::Graph::add_frame() - create an
SVG::Graph::Datainstance, containing anSVG::Graph::Data::Datuminstance for each data point - Attach the
SVG::Graph::Datainstance to yourSVG::Graph::FrameusingSVG::Graph::Frame::add_data() - Attach glyphs to the
SVG::Graph::Frameinstance usingSVG::Graph::Frame::add_glyph() - Call
SVG::Graph::draw()
π§ MULTIPLE DATA SETS π§
- create an
SVG::Graphinstance - create an
SVG::Graph::Frameinstance by callingSVG::Graph::add_frame() - create an
SVG::Graph::Datainstance, containing anSVG::Graph::Data::Datuminstance for each data point - Attach the
SVG::Graph::Datainstance to yourSVG::Graph::FrameusingSVG::Graph::Frame::add_data() - Attach glyphs to the
SVG::Graph::Frameinstance usingSVG::Graph::Frame::add_glyph() - repeat
[2-5]for each additional data set to be added.add_frame()can be called onSVG::Graphto add top-level data sets, orSVG::Graph::Frameto add hierarchical data sets. - Call
SVG::Graph::draw()
literally the same steps with one extra lil repeat step. slay π
π¬ FEEDBACK π¬
got thoughts? 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
(just the one. short and sweet, we stan π)
β METHODS β
π 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
the birth of your graph, basically. main character origin story β¨
π init
Title : init
Usage :
Function:
Example :
Returns :
Args :
ngl bestie, this one's a mystery even to me β the original literally left it blank π
π 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
okay the frame_transform options are lowkey the fun part β you can literally flip your whole graph around π
π 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
the moment we've all been waiting for β this is where the actual picture happens π¨ no args, just vibes.
and that's the whole page bestie! this one came from perl v5.36.0, dated 2022-12-12 β so it's vintage, but like, the cute kind π go forth and plot something iconic π¦β¨
π¦ where this page comes from
- debian bookworm: libsvg-graph-perl 0.02-4 Β· Artistic-2.0
- debian trixie: libsvg-graph-perl 0.02-4 Β· Artistic-2.0
- ubuntu noble: libsvg-graph-perl 0.02-4 Β· Artistic-2.0
- ubuntu resolute: libsvg-graph-perl 0.02-4 Β· Artistic-2.0
- ubuntu stonking: libsvg-graph-perl 0.02-4 Β· Artistic-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms