Graph(3pm)

πŸ“¦
version 0.02 Β· 4 versions
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

🌸 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::Graph 0.02 is 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::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

for the deets, go see SVG::Graph::Frame and SVG::Graph::Glyph ✨

🌸 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()

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