--- loncom/xml/lonplot.pm 2012/07/24 10:50:54 1.163 +++ loncom/xml/lonplot.pm 2012/12/05 19:30:28 1.170 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.163 2012/07/24 10:50:54 foxr Exp $ +# $Id: lonplot.pm,v 1.170 2012/12/05 19:30:28 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -132,7 +132,12 @@ my $real_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; my $pos_real_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^[+]?\d*\.?\d*([eE][+-]\d+)?$/}; -my $color_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^x[\da-fA-F]{6}$/}; +my $color_test; +if ($version < 4.6) { + $color_test = sub {$_[0]=~s/\s+//g;$_[0]=~s/^\#/x/;$_[0]=~/^x[\da-fA-F]{6}$/}; +} else { + $color_test = sub {$_[0]=~s/\s+//g;$_[0]=~s/^x/#/;$_[0]=~/^\#[\da-fA-F]{6}$/}; +} my $onoff_test = sub {$_[0]=~/^(on|off)$/}; my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; my $sml_test = sub {$_[0]=~/^(\d+|small|medium|large)$/}; @@ -463,7 +468,13 @@ my %tic_defaults = description => 'Number of minor tics per major tic mark', edit_type => 'entry', size => '10' - }, + }, + rotate => { + default => 'off', + test => $onoff_test, + description => 'Rotate tic label by 90 degrees if on', + edit_type => 'onoff' + } ); my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat', 'xzero', 'yzero'); @@ -1714,6 +1725,9 @@ sub generate_tics { $result .= "set $type $spec->{'location'} "; $result .= ($spec->{'mirror'} eq 'on') ? 'mirror ' : 'nomirror '; + if ($spec->{'rotate'} eq 'on') { + $result .= ' rotate '; + } if (defined $spec->{'ticspecs'}) { $result .= '( '; my @ticspecs; @@ -1874,8 +1888,8 @@ sub write_gnuplot_file { $gnuplot_input .= "set samples $Apache::lonplot::plot{'samples'}\n"; # title, xlabel, ylabel # titles - my $extra_space_x = ($xtics{'location'} eq 'axis') ? ' 0, -0.5 ' : ''; - my $extra_space_y = ($ytics{'location'} eq 'axis') ? ' -0.5, 0 ' : ''; + my $extra_space_x = ($xtics{'location'} eq 'axis') ? ' offset 0, -0.5 ' : ''; + my $extra_space_y = ($ytics{'location'} eq 'axis') ? ' offset -0.5, 0 ' : ''; if ($target eq 'tex') { $gnuplot_input .= "set title \"$title\" font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($title)) ; @@ -1970,24 +1984,23 @@ sub write_gnuplot_file { # my $linestyle_index = 50; my $line_width = ''; + my $plots; # If arrows are needed there will be an arrow style for each as well: # my $arrow_style_index = 50; - my $plot_command; - my $plot_type; - for (my $i = 0;$i<=$#curves;$i++) { $curve = $curves[$i]; - $plot_command.= ', ' if ($i > 0); + my $plot_command; + my $plot_type = ', ' if ($i > 0); if ($target eq 'tex') { $curve->{'linewidth'} *= 2; } $line_width = $curve->{'linewidth'}; if (exists($curve->{'function'})) { - $plot_type = + $plot_type .= $curve->{'function'}.' title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; @@ -2011,7 +2024,7 @@ sub write_gnuplot_file { print $fh $datatext; close($fh); # generate gnuplot text - $plot_type = '"'.$datafilename.'" title "'. + $plot_type .= '"'.$datafilename.'" title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; } @@ -2033,10 +2046,6 @@ sub write_gnuplot_file { my $color = $curve->{'color'}; $color =~ s/^x/#/; # Convert xhex color -> #hex color. - my $style_command = "set style line $linestyle_index $pointtype $pointsize linetype $lt linewidth $line_width lc rgb '$color'\n"; - $gnuplot_input .= $style_command; - - if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || @@ -2067,8 +2076,8 @@ sub write_gnuplot_file { $arrow_style_index++; } - - + my $style_command = "set style line $linestyle_index $pointtype $pointsize linetype $lt linewidth $line_width lc rgb '$color'\n"; + $gnuplot_input .= $style_command; # The condition below is because gnuplot lumps the linestyle in with the # arrowstyle _sigh_. @@ -2077,10 +2086,12 @@ sub write_gnuplot_file { $plot_command.= " ls $linestyle_index"; } - $gnuplot_input .= 'plot ' . $plot_type . ' ' . $plot_command . "\n"; + $plots .= $plot_type . ' ' . $plot_command; $linestyle_index++; # Each curve get a unique linestyle. } + $gnuplot_input .= 'plot '.$plots; # Write the output to a file. + # &Apache::lonnet::logthis($gnuplot_input); # uncomment to log the gnuplot input. open (my $fh, "> $tmpdir$filename.data"); binmode($fh, ':utf8');