#!/usr/bin/perl # # dw/bin/dev/graphs_usage.pl - Graphs usage examples # # Authors: # Anarres # # Copyright (c) 2010 by Dreamwidth Studios, LLC. # # Gives examples of usage of the DW::Graphs module to make pie, bar, and line # graphs. This script is only for the purpose of showing how the Graphs module # works, normally the Graphs module would be used by graph image controller modules # such as DW::Controller::PaidAccountsGraph, not by a standalone script. A config # file example.yaml (which just repeats the default settings) is used, but this can # be left out in which case a graph is made using the default configuration. # # This program is free software; you may redistribute it and/or modify it under # the same terms as Perl itself. For a copy of the license, please reference # 'perldoc perlartistic' or 'perldoc perlgpl'. BEGIN { require "$ENV{LJHOME}/cgi-bin/LJ/Directories.pm"; } use DW::Graphs; use strict; use warnings; # -------------------------- Generate a pie chart ---------------------------> my $pie_ref = { "label 1" => 1, "label 2" => 0.05, "label 3" => 0.07, "label 4" => 1.5, "label 5" => 0.12, "label 6" => 0.06, }; my $gd = DW::Graphs::pie( $pie_ref, "example.yaml" ); # Print the graph to a file open( IMG, '>pie.png' ) or die $!; binmode IMG; print IMG $gd->png; # ---------------------- Generate a bar chart -------------------------------> my $bar_ref = [ 13.377, 15.9, 145.67788, 123.1111, 0.1, 44.03455, 33.3, 43, 123 ]; # Labels - one label per bar. If labels are not wanted pass empty strings. # Optinally put "\n" in front of every 2nd label to stop them crowding each-other. my $bar_labels = [ ( "label 1", "\nlabel 2", "label 3", "\nlabel 4", "label 5", "\nlabel 6", "label 7", "\nlabel 8", "label 9" ) ]; my $bar_gd = DW::Graphs::bar( $bar_ref, $bar_labels, 'x-axis label', 'y-axis label', "example.yaml" ); # Print the graph to a file open( IMG, '>bar.png' ) or die $!; binmode IMG; print IMG $bar_gd->png; # ---------- Generate a bar chart with two (or more) datasets -------------> # You can have any number of datasets - here there are two my @values1 = ( 7243, 15901, 26188 ); my @values2 = ( 4243, 12901, 11188 ); # Dataset names to distinguish the datasets, used in the legend. The number # of dataset names must be the same as the number of datasets! my $names_ref = [ ( "Dataset 1", "Dataset 2" ) ]; # labels - one label per bar. The number of labels must be the same as the # number of values per dataset. If labels are not wanted pass empty strings. my @bar2_labels = ( "Bar 1", "Bar 2", "Bar 3" ); # Package the input my $bar2_input = [ [@bar2_labels], [@values1], [@values2] ]; my $bar2_gd = DW::Graphs::bar2( $bar2_input, 'x-axis label', 'y-axis label', $names_ref, "example.yaml" ); # Print the graph to a file open( IMG, '>bar2.png' ) or die $!; binmode IMG; print IMG $bar2_gd->png; # --------------------- Generate a line graph --------------------------------> # Define labels to go along the horizontal axis under the graph. # If labels are not wanted use empty strings my @line_labels = ( "1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th" ); # Define the datasets - each dataset will form one line on the graph # Each dataset should have the same length as the number of labels my @dataset1 = qw( 1900 2035 2078 2140 2141 2200 2460 2470 2576 ); my @dataset2 = qw( 871 996 990 1058 1102 1162 1105 1150 ); my @dataset3 = qw( 200 360 370 471 496 690 758 802 ); # Names for the datasets, for the graph legend my $line_names = [ "1st dataset", "2nd dataset", "3rd dataset" ]; # Put the data in a format DW::Graphs can deal with my $line_ref = [ [@line_labels], [@dataset1], [@dataset2], [@dataset3] ]; my $line_gd = DW::Graphs::lines( $line_ref, 'x-axis label', 'y-axis label', $line_names, "example.yaml" ); # Print the graph to a file open( IMG, '>lines.png' ) or die $!; binmode IMG; print IMG $line_gd->png;