#!/usr/bin/perl # # $Id: graph.png,v 1.12 2002/05/16 01:31:23 minaeibi Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/cgi-bin/graph.gif # # http://www.lon-capa.org/ # # The LearningOnline Network with CAPA # Behrouz Minaei # YEAR=2001 # 9/13/01, 9/25/01, 10/6/01, 10/9/01, 12/25/01 # YEAR=2002 # 2/1/02, 5/13/02, # A CGI script that dynamically outputs a graphical chart for lonstatistics. # #### use strict; use GD::Graph::bars; use GD::Graph::colour; use GD::Graph::Data; $|=1; # Autoflush after each print/write my ($Titr,$xlab,$ylab,$Max,$PNo,$data1,$data2)=split(/&/,$ENV{'QUERY_STRING'}); my @data11=split(/\,/,$data1); my @data12=split(/\,/,$data2); my @xlabels; for (my $nIdx=0; $nIdx<$PNo; $nIdx++ ) { $xlabels[$nIdx]=$nIdx+1; } #my $bg = (defined(@data2)) ? 'lorange' : 'white'; my @data =(\@xlabels,\@data11,\@data12); my $Range1; my $Range2; if ($xlab=~/^Concepts$/){ $Range1=270; $Range2=200; } else { if ( $PNo > 10 ) { $Range1 = 20*$PNo; } else { $Range1 = 250+30*$PNo; } $Range2=200; } my $MyGraph = GD::Graph::bars->new($Range1,$Range2); $MyGraph->set( # x_label => $xlab, y_label => $ylab, long_ticks => 1, tick_length => 0, x_ticks => 0, # title => 'LON-CAPA Option Response Problem:'.$cid, title => $Titr, y_max_value => $Max, # y_tick_number => $ytic, y_label_skip => 1, dclrs => [ qw( green dgreen lyellow lpurple cyan lorange)], bar_spacing => 10, cumulate => 2, zero_axis => 1, # legend_placement => 'RT', fgclr => 'black', boxclr => 'lorange', accentclr => 'dblue', valuesclr => '#ffff77', l_margin => 10, b_margin => 10, r_margin => 10, t_margin => 10, transparent => 0, ) or warn $MyGraph->error; #if ($xlab=~/^Concepts$/){ # $MyGraph->set_legend( 'Correct Answers', 'Incorrect Answers'); #} # Tell the server we are sending a gif graphic print <set_y_label_font('/home/httpd/cgi-bin/cetus.ttf', 16); #$MyGraph->set_x_label_font('/home/httpd/cgi-bin/cetus.ttf', 16); #$MyGraph->set_y_axis_font('/home/httpd/cgi-bin/cetus.ttf', 12); #$MyGraph->set_x_axis_font('/home/httpd/cgi-bin/cetus.ttf', 12); #$MyGraph->set_title_font('/home/httpd/cgi-bin/cetus.ttf', 18); #$MyGraph->set_legend_font('/home/httpd/cgi-bin/cetus.ttf', 10); #$MyGraph->set_values_font('/home/httpd/cgi-bin/cetus.ttf', 10); my $BinaryData=$MyGraph->plot(\@data)->png; undef $MyGraph; binmode(STDOUT); open IMG,"|pngtopnm|ppmtogif 2>/dev/null"; # convert into a gif image print IMG $BinaryData; # output image $|=1; # be sure to flush before closing close IMG;