<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">#!/usr/bin/perl<br><br>use strict;<br>use GD::Graph::area;<br>#use GD::Graph::lines;<br>use Carp;<br>use Time::Local;<br><br>umask 0222;<br><br>#<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set dimensions for graphics<br>#<br>our ($x,$y) =(500, 210);<br><br><br>open CONFIG, $configfile<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die "can't open $configfile: $!";<br><br>our %LOCATION;<br>our %TTY;<br>while (&lt;CONFIG&gt;) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (/^(\d) (\S+) (\S.*)/) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $LOCATION{$1} = $2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $TTY{$1}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = $3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br><br><br><br>my
 (@ttyi,@ttyt,@both,@label);<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ttyi[$x] = $y; and so on<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $both[] = sum of tty's on the device, there's always two on each device<br><br><br><br>my @data;<br>my @legend;<br>my @colors;<br><br>if ($TTY{$switch} =~ /ttyt/) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @data = (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ @label ],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ @both&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ @ttyt&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @legend = (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 'ttyi',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'ttyt',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @colors = (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'red',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'blue',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'cyan',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br>}<br>else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die "cannot determine proper TTYs";<br>}<br><br><br>$graph = GD::Graph::area-&gt;new($x,$y);<br><br><br><br>$graph-&gt;set(<br><br><br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x_label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; $dateLabel,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 x_label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; "$title&nbsp;&nbsp; $dateLabel&nbsp; $weekday[$wday]",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #x_label&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; '',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x_label_skip&nbsp;&nbsp;&nbsp; =&gt; 6 * 3,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x_tick_offset&nbsp;&nbsp; =&gt; 6 * 3,<br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x_all_ticks&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 1,<br><br>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; two_axes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 1,<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y_label =&gt; 'completions / 10 minutes',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y_min_value&nbsp;&nbsp;&nbsp;&nbsp; =&gt;&nbsp; 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y_max_value&nbsp;&nbsp;&nbsp;&nbsp; =&gt;
 $speed,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y_tick_number&nbsp;&nbsp; =&gt;&nbsp; $speed/20,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y_label_skip&nbsp;&nbsp;&nbsp; =&gt; 2,<br><br><br>) or die $graph-&gt;error;<br><br>$graph-&gt;set( dclrs =&gt; [ @colors ] );<br>$graph-&gt;set_legend(@legend);<br>$graph-&gt;set(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; legend_placement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 'RT',<br>);<br><br>my $gd = $graph-&gt;plot(\@data) or die $graph-&gt;error;<br><br><br>open (IMG, '&gt;', $png) or die "can't open '$png': $!";<br>binmode IMG;<br>print IMG $gd-&gt;png;<br>close IMG;<br><br>exit;<br><br><br><br><br>--- On <b>Mon, 8/25/08, Mark Fowle <i>&lt;mfowle@navicominc.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">From: Mark Fowle &lt;mfowle@navicominc.com&gt;<br>Subject: Re: [tpm] GD::Graph question<br>To: "Madison
 Kelly" &lt;linux@alteeve.com&gt;<br>Cc: "tpm" &lt;tpm@to.pm.org&gt;<br>Received: Monday, August 25, 2008, 8:33 PM<br><br><pre>If SVG is OK for you (client browser support wise)<br>I'd go one of two routes:<br>1. draw a SVG graph with the first dataset and a second graph with<br>almost everything 0% opaque so only the line shows up.<br><br>2. get into SVG Graph and change the code so y scale can be a scalar or<br>an array. Then adjust the scaling code to use the array element<br>corresponding to the dataset.<br><br><br><br>Idea 2 is probably implementable in GD Graph.<br><br>Mark Fowle<br><br><br>-----Original Message-----<br>From: toronto-pm-bounces+mfowle=navicominc.com@pm.org<br>[mailto:toronto-pm-bounces+mfowle=navicominc.com@pm.org] On Behalf Of<br>Madison Kelly<br>Sent: Monday, August 25, 2008 4:26 PM<br>To: Scott Elcomb<br>Cc: tpm<br>Subject: Re: [tpm] GD::Graph question<br><br>Scott Elcomb wrote:<br>&gt; On Sun, Aug 24, 2008 at 7:47 PM, Alex
 Beamish &lt;talexb@gmail.com&gt;<br>wrote:<br>&gt;&gt; My first Perl gig ten years ago was doing graphs, and I used Gnuplot<br>&gt;&gt; quite successfully to draw graphs-- it's a very flexible package.<br>&gt; <br>&gt; Hmm.  My first gig involved writing wrappers around GD::Graph.  Since<br>&gt; it was "my first gig" the code in my ... um... uh... library<br>"SAL"<br>&gt; definitely reflects that.  One day I might even get around to<br>&gt; modernizing it and making it useful.<br>&gt; <br>&gt; Unfortunately (fortunately?) I never had to deal with this particular<br>&gt; problem.  Madison, if you find a solution could I ask that you post it<br>&gt; up for us?<br>&gt; <br>&gt; Many thanks.<br>&gt; - Scott.<br><br>At this point, I've moved on from GD::Graph and am playing with <br>SVG::TT::Graph. I'm having mixed luck; It seems like a much more <br>flexible solution and I am getting cleaner graphs, but I have not yet <br>been enable to figure out to create
 a dual Y-axis graph, assuming it is <br>possible at all.<br><br>Once I figure something out I will indeed post it to the list "for <br>posterity". :)<br><br>Madi<br>_______________________________________________<br>toronto-pm mailing list<br>toronto-pm@pm.org<br>http://mail.pm.org/mailman/listinfo/toronto-pm<br>_______________________________________________<br>toronto-pm mailing list<br>toronto-pm@pm.org<br>http://mail.pm.org/mailman/listinfo/toronto-pm<br></pre></blockquote></td></tr></table>