Category: | PerlMonks Related Scripts |
Author/Contact Info | Tom Hukins (tomhukins) <tom@eborcom.com> |
Description: | Converts output from quickrep.pl into a PNG bar chart to show how many of your nodes have a given reputation. |
#!/usr/bin/perl -Tw
# quickrep-graph.pl
#
# Converts output from quickrep.pl
# <http://perlmonks.org/index.pl?node_id=111464> into a PNG bar chart
+to
# show how many of your nodes have a given reputation
#
# Tom Hukins <tom@eborcom.com> (tomhukins on Perl Monks) - 20011022
#
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself
use strict;
use GD::Graph::bars ();
use XML::Simple qw(XMLin);
{
# Allow the user to specify an alternative output filename on the
# command line
my $output_filename = shift || 'quickrep.png';
my($ratings, $username) = &derive_stats();
&draw_graph($ratings, $username, $output_filename);
}
sub derive_stats {
my $xml = XMLin('./quickrep.xml') or die "$!";
my $username = $xml->{INFO}{foruser};
my @ratings; # Counts the number of nodes with a given rating
while (my($id, $node) = each %{ $xml->{NODE} }) {
@ratings[ $node->{reputation} ]++;
}
my $max_reputation = scalar(@ratings) - 1;
return([ [0..$max_reputation], [@ratings] ], $username);
}
sub draw_graph {
my($ratings, $username, $output_filename) = @_;
my $graph = new GD::Graph::bars( 600, 400 );
$graph->set(
x_label => 'Reputation',
y_label => 'Number of Nodes',
title => "PerlMonks Nodes by Reputation for $username"
) or die "$!";
my $gd = $graph->plot( $ratings );
open(IMG, ">$output_filename") or die "$!";
binmode IMG;
print IMG $gd->png;
close IMG;
}
|
Back to
Code Catacombs