version 1.161, 2012/07/17 09:54:48
|
version 1.181, 2018/10/24 13:37:43
|
Line 42 use Apache::lonnet;
|
Line 42 use Apache::lonnet;
|
use LONCAPA; |
use LONCAPA; |
|
|
|
|
use vars qw/$weboutputformat $version/; |
use vars qw/$weboutputformat $version $colorprefix/; |
|
|
|
|
|
|
Line 56 BEGIN {
|
Line 56 BEGIN {
|
if ($version >= 4) { |
if ($version >= 4) { |
$weboutputformat = 'png'; |
$weboutputformat = 'png'; |
} |
} |
|
$colorprefix = 'x'; |
|
if ($version > 4.6) { |
|
$colorprefix = '#'; |
|
} |
} |
} |
|
|
|
|
Line 78 BEGIN {
|
Line 81 BEGIN {
|
## align |
## align |
## |
## |
## @labels: $labels[$i] = \%label |
## @labels: $labels[$i] = \%label |
## %label: text, xpos, ypos, justify |
## %label: text, xpos, ypos, justify, rotate, zlayer |
## |
## |
## @curves: $curves[$i] = \%curve |
## @curves: $curves[$i] = \%curve |
## %curve: name, linestyle, ( function | data ) |
## %curve: name, linestyle, ( function | data ) |
Line 105 my %linetypes = # For png use these li
|
Line 108 my %linetypes = # For png use these li
|
); |
); |
my %ps_linetypes = # For ps the line types are different! |
my %ps_linetypes = # For ps the line types are different! |
( |
( |
solid => 0, |
solid => 1, |
dashed => 7 |
dashed => 7 |
); |
); |
|
|
Line 132 my $real_test =
|
Line 135 my $real_test =
|
sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; |
sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; |
my $pos_real_test = |
my $pos_real_test = |
sub {$_[0]=~s/\s+//g;$_[0]=~/^[+]?\d*\.?\d*([eE][+-]\d+)?$/}; |
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 $onoff_test = sub {$_[0]=~/^(on|off)$/}; |
my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; |
my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; |
my $sml_test = sub {$_[0]=~/^(\d+|small|medium|large)$/}; |
my $sml_test = sub {$_[0]=~/^(\d+|small|medium|large)$/}; |
Line 181 my %gnuplot_defaults =
|
Line 189 my %gnuplot_defaults =
|
size => '10' |
size => '10' |
}, |
}, |
bgcolor => { |
bgcolor => { |
default => 'xffffff', |
default => $colorprefix.'ffffff', |
test => $color_test, |
test => $color_test, |
description => 'Background color of image (xffffff)', |
description => 'Background color of image ('.$colorprefix.'ffffff)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10', |
size => '10', |
class => 'colorchooser' |
class => 'colorchooser' |
}, |
}, |
fgcolor => { |
fgcolor => { |
default => 'x000000', |
default => $colorprefix.'000000', |
test => $color_test, |
test => $color_test, |
description => 'Foreground color of image (x000000)', |
description => 'Foreground color of image ('.$colorprefix.'000000)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10', |
size => '10', |
class => 'colorchooser' |
class => 'colorchooser' |
Line 253 my %gnuplot_defaults =
|
Line 261 my %gnuplot_defaults =
|
test => sub {$_[0]=~/^(left|right|middle|center)$/}, |
test => sub {$_[0]=~/^(left|right|middle|center)$/}, |
description => 'Alignment for image in HTML', |
description => 'Alignment for image in HTML', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => ['left','right','middle'] |
choices => ['left','right','middle','center'] |
}, |
}, |
texwidth => { |
texwidth => { |
default => '93', |
default => '93', |
Line 362 my %gnuplot_defaults =
|
Line 370 my %gnuplot_defaults =
|
}, |
}, |
); |
); |
|
|
|
|
my %key_defaults = |
my %key_defaults = |
( |
( |
title => { |
title => { |
Line 416 my %label_defaults =
|
Line 425 my %label_defaults =
|
description => 'Rotation of label (degrees)', |
description => 'Rotation of label (degrees)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10', |
size => '10', |
} |
}, |
|
zlayer => { |
|
default => '', |
|
test => sub {$_[0]=~/^(front|back)$/}, |
|
description => 'Z position of label', |
|
edit_type => 'choice', |
|
choices => ['front','back'], |
|
}, |
); |
); |
|
|
my @tic_edit_order = ('location','mirror','start','increment','end', |
my @tic_edit_order = ('location','mirror','start','increment','end', |
Line 463 my %tic_defaults =
|
Line 479 my %tic_defaults =
|
description => 'Number of minor tics per major tic mark', |
description => 'Number of minor tics per major tic mark', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10' |
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'); |
my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat', 'xzero', 'yzero'); |
my %axis_defaults = |
my %axis_defaults = |
( |
( |
color => { |
color => { |
default => 'x000000', |
default => $colorprefix.'000000', |
test => $color_test, |
test => $color_test, |
description => 'Color of grid lines (x000000)', |
description => 'Color of grid lines ('.$colorprefix.'000000)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10', |
size => '10', |
class => 'colorchooser' |
class => 'colorchooser' |
Line 507 my %axis_defaults =
|
Line 529 my %axis_defaults =
|
}, |
}, |
xformat => { |
xformat => { |
default => 'on', |
default => 'on', |
test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, |
test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E|P(|\s*\Q\0317\0200\E)))$/}, |
description => 'X-axis number formatting', |
description => 'X-axis number formatting', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => ['on', 'off', '2e', '2f'], |
choices => ['on', 'off', '2e', '2f'], |
}, |
}, |
yformat => { |
yformat => { |
default => 'on', |
default => 'on', |
test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, |
test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E|P(|\s*\Q\0317\0200\E)))$/}, |
description => 'Y-axis number formatting', |
description => 'Y-axis number formatting', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => ['on', 'off', '2e', '2f'], |
choices => ['on', 'off', '2e', '2f'], |
Line 537 my %axis_defaults =
|
Line 559 my %axis_defaults =
|
}, |
}, |
); |
); |
|
|
|
|
my @curve_edit_order = ('color','name','linestyle','linewidth','linetype', |
my @curve_edit_order = ('color','name','linestyle','linewidth','linetype', |
'pointtype','pointsize','limit', 'arrowhead', 'arrowstyle', |
'pointtype','pointsize','limit', 'arrowhead', 'arrowstyle', |
'arrowlength', 'arrowangle', 'arrowbackangle' |
'arrowlength', 'arrowangle', 'arrowbackangle' |
Line 545 my @curve_edit_order = ('color','name','
|
Line 568 my @curve_edit_order = ('color','name','
|
my %curve_defaults = |
my %curve_defaults = |
( |
( |
color => { |
color => { |
default => 'x000000', |
default => $colorprefix.'000000', |
test => $color_test, |
test => $color_test, |
description => 'Color of curve (x000000)', |
description => 'Color of curve ('.$colorprefix.'000000)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10', |
size => '10', |
class => 'colorchooser' |
class => 'colorchooser' |
Line 649 my %curve_defaults =
|
Line 672 my %curve_defaults =
|
undef %Apache::lonplot::plot; |
undef %Apache::lonplot::plot; |
my (%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics); |
my (%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics); |
|
|
|
my $current_tics; # Reference to the current tick hash |
|
|
sub start_gnuplot { |
sub start_gnuplot { |
undef(%Apache::lonplot::plot); undef(%key); undef(%axis); |
undef(%Apache::lonplot::plot); undef(%key); undef(%axis); |
undef($title); undef($xlabel); undef($ylabel); |
undef($title); undef($xlabel); undef($ylabel); |
Line 676 sub start_gnuplot {
|
Line 701 sub start_gnuplot {
|
|
|
if ($constructtag) { |
if ($constructtag) { |
# |
# |
# The color chooser does not prepent x to the color values |
# Color chooser does not prepend x (or #) to the color values |
# Do that here: |
# Do that here: |
# |
# |
foreach my $attribute ('bgcolor', 'fgcolor') { |
foreach my $attribute ('bgcolor', 'fgcolor') { |
my $value = $token->[2]{$attribute}; |
my $value = $token->[2]{$attribute}; |
if (defined $value && !($value =~ /^x/)) { |
if (defined $value && ($value !~ /^\Q$colorprefix\E/)) { |
$token->[2]{$attribute} = 'x' . $value; |
$token->[2]{$attribute} = $colorprefix . $value; |
} |
} |
} |
} |
$result = &Apache::edit::rebuild_tag($token); |
$result = &Apache::edit::rebuild_tag($token); |
Line 718 sub end_gnuplot {
|
Line 743 sub end_gnuplot {
|
$filename = &escape($filename); |
$filename = &escape($filename); |
## return image tag for the plot |
## return image tag for the plot |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result .= <<"ENDIMAGE"; |
my $srcatt = "src=\"/cgi-bin/plot.$weboutputformat?file=$filename.data\""; |
<img src = "/cgi-bin/plot.$weboutputformat?file=$filename.data" |
my $widthatt = "width=\"$Apache::lonplot::plot{'width'}\""; |
width = "$Apache::lonplot::plot{'width'}" |
my $heightatt = "height=\"$Apache::lonplot::plot{'height'}\""; |
height = "$Apache::lonplot::plot{'height'}" |
my $alignatt = "align=\"$Apache::lonplot::plot{'align'}\""; |
align = "$Apache::lonplot::plot{'align'}" |
my $altatt = "alt=\"$Apache::lonplot::plot{'alttag'}\""; |
alt = "$Apache::lonplot::plot{'alttag'}" /> |
if ($Apache::lonplot::plot{'align'} eq 'center') { |
ENDIMAGE |
$result .= '<div style="text-align:center">'. |
|
"<img $srcatt $widthatt $heightatt $altatt>". |
|
"</div>\n"; |
|
|
|
} else { |
|
$result .= "<img $srcatt $widthatt $heightatt $alignatt $altatt>"; |
|
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonxml::debug(" gnuplot wid = $Apache::lonplot::plot{'width'}"); |
&Apache::lonxml::debug(" gnuplot wid = $Apache::lonplot::plot{'width'}"); |
&Apache::lonxml::debug(" gnuplot ht = $Apache::lonplot::plot{'height'}"); |
&Apache::lonxml::debug(" gnuplot ht = $Apache::lonplot::plot{'height'}"); |
Line 732 ENDIMAGE
|
Line 763 ENDIMAGE
|
&Apache::lonxml::register_ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); |
&Apache::lonxml::register_ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); |
$result = "%DYNAMICIMAGE:$Apache::lonplot::plot{'width'}:$Apache::lonplot::plot{'height'}:$Apache::lonplot::plot{'texwidth'}\n"; |
$result = "%DYNAMICIMAGE:$Apache::lonplot::plot{'width'}:$Apache::lonplot::plot{'height'}:$Apache::lonplot::plot{'texwidth'}\n"; |
$result .= '\graphicspath{{'.$tmpdir.'}}'."\n"; |
$result .= '\graphicspath{{'.$tmpdir.'}}'."\n"; |
|
if ($Apache::lonplot::plot{'align'} eq 'center') { |
|
$result .= '\begin{center}'; |
|
} |
$result .= '\includegraphics[width='.$Apache::lonplot::plot{'texwidth'}.' mm]{'.&unescape($filename).'.eps}'; |
$result .= '\includegraphics[width='.$Apache::lonplot::plot{'texwidth'}.' mm]{'.&unescape($filename).'.eps}'; |
|
if ($Apache::lonplot::plot{'align'} eq 'center') { |
|
$result .= '\end{center}'; |
|
} |
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
Line 748 sub start_xtics {
|
Line 785 sub start_xtics {
|
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval, |
&get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
|
$current_tics = \%xtics; |
|
&Apache::lonxml::register('Apache::lonplot', 'tic'); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'xtics'); |
$result .= &Apache::edit::tag_start($target,$token,'xtics'); |
$result .= &edit_attributes($target,$token,\%tic_defaults, |
$result .= &edit_attributes($target,$token,\%tic_defaults, |
Line 766 sub end_xtics {
|
Line 805 sub end_xtics {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
|
&Apache::lonxml::deregister('Apache::lonplot', 'tic'); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 779 sub start_ytics {
|
Line 819 sub start_ytics {
|
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval, |
&get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
|
$current_tics = \%ytics; |
|
&Apache::lonxml::register('Apache::lonplot', 'tic'); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'ytics'); |
$result .= &Apache::edit::tag_start($target,$token,'ytics'); |
$result .= &edit_attributes($target,$token,\%tic_defaults, |
$result .= &edit_attributes($target,$token,\%tic_defaults, |
Line 797 sub end_ytics {
|
Line 839 sub end_ytics {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
|
&Apache::lonxml::deregister('Apache::lonplot', 'tic'); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
return $result; |
return $result; |
} |
} |
|
|
|
|
|
##---------------------------------------------------------------- |
|
# |
|
# Tic handling: |
|
# The <tic> tag allows users to specify exact Tic positions and labels |
|
# for each axis. In this version we only support level 0 tics (major tic). |
|
# Each tic has associated with it a position and a label |
|
# $current_tics is a reference to the current tick description hash. |
|
# We add elements to an array in that has: ticspecs whose elements |
|
# are 'pos' - the tick position and 'label' - the tic label. |
|
# |
|
|
|
|
|
sub start_tic { |
|
my ($target, $token, $tagstack, $parstack, $parser, $safeeval, $style) = @_; |
|
|
|
my $result = ''; |
|
if ($target eq 'web' || $target eq 'tex') { |
|
my $tic_location = &Apache::lonxml::get_param('location', $parstack, $safeeval); |
|
my $tic_label = &Apache::lonxml::get_all_text('/tic', $parser); |
|
|
|
# Tic location must e a real: |
|
|
|
if (!&$real_test($tic_location)) { |
|
&Apache::lonxml::warning("Tic location: $tic_location must be a real number"); |
|
} else { |
|
|
|
if (!defined $current_tics->{'ticspecs'}) { |
|
$current_tics->{'ticspecs'} = []; |
|
} |
|
my $ticspecs = $current_tics->{'ticspecs'}; |
|
push (@$ticspecs, {'pos' => $tic_location, 'label' => $tic_label}); |
|
} |
|
} |
|
|
|
return $result; |
|
} |
|
|
|
sub end_tic { |
|
return ''; |
|
} |
|
|
##-----------------------------------------------------------------font |
##-----------------------------------------------------------------font |
my %font_properties = |
my %font_properties = |
( |
( |
Line 1416 sub start_curve {
|
Line 1501 sub start_curve {
|
($token,$parstack,$safeeval,keys(%curve_defaults)); |
($token,$parstack,$safeeval,keys(%curve_defaults)); |
if ($constructtag) { |
if ($constructtag) { |
# |
# |
# Fix up the color attribute as jcolor does not prepend an x |
# Fix up the color attribute as jcolor does not prepend an x |
|
# (or #) |
# |
# |
my $value = $token->[2]{'color'}; |
my $value = $token->[2]{'color'}; |
if (defined $value && !($value =~ /^x/)) { |
if (defined $value && ($value !~ /^\Q$colorprefix\E/)) { |
$token->[2]{'color'} = 'x' . $value; |
$token->[2]{'color'} = $colorprefix . $value; |
} |
} |
$result = &Apache::edit::rebuild_tag($token); |
$result = &Apache::edit::rebuild_tag($token); |
} |
} |
Line 1457 sub start_function {
|
Line 1543 sub start_function {
|
$style); |
$style); |
$function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]); |
$function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]); |
$function=~s/\^/\*\*/gs; |
$function=~s/\^/\*\*/gs; |
|
$function=~ s/^\s+//; # Trim leading |
|
$function=~ s/\s+$//; # And trailing whitespace. |
$curves[-1]->{'function'} = $function; |
$curves[-1]->{'function'} = $function; |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function'); |
$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function'); |
Line 1572 sub start_axis {
|
Line 1660 sub start_axis {
|
if ($constructtag) { |
if ($constructtag) { |
# |
# |
# Fix up the color attribute since jchooser does not |
# Fix up the color attribute since jchooser does not |
# prepend an x to the color: |
# prepend an x (or #) to the color: |
# |
# |
my $value = $token->[2]{'color'}; |
my $value = $token->[2]{'color'}; |
if (defined $value && !($value =~ /^x/)) { |
if (defined $value && ($value !~ /^\Q$colorprefix\E/)) { |
$token->[2]{'color'} = 'x' . $value; |
$token->[2]{'color'} = $colorprefix . $value; |
} |
} |
|
|
$result = &Apache::edit::rebuild_tag($token); |
$result = &Apache::edit::rebuild_tag($token); |
Line 1636 sub get_attributes{
|
Line 1724 sub get_attributes{
|
} |
} |
return ; |
return ; |
} |
} |
|
## |
|
# Generate tic mark specifications. |
|
# |
|
# @param type - type of tics (xtics or ytics). |
|
# @param spec - Reference to a hash that contains the tic specification. |
|
# @param target - 'tex' if hard copy target. |
|
# |
|
# @return string - the tic specification command. |
|
# |
|
sub generate_tics { |
|
my ($type, $spec, $target) = @_; |
|
my $result = ''; |
|
|
|
|
|
if ((ref($spec) eq 'HASH') && (keys(%{$spec}) > 0)) { |
|
|
|
|
|
|
|
# Major tics: - If there are 'ticspecs' these override any other |
|
# specifications: |
|
|
|
|
|
|
|
$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; |
|
my $ticinfo = $spec->{'ticspecs'}; |
|
foreach my $tic (@$ticinfo) { |
|
push(@ticspecs, '"' . $tic->{'label'} . '" ' . $tic->{'pos'} ); |
|
} |
|
$result .= join(', ', (@ticspecs)); |
|
$result .= ' )'; |
|
} else { |
|
$result .= "$spec->{'start'}, "; |
|
$result .= "$spec->{'increment'}, "; |
|
$result .= "$spec->{'end'} "; |
|
} |
|
if ($target eq 'tex' ) { |
|
$result .= 'font "Helvetica,22"'; |
|
} |
|
$result .= "\n"; |
|
|
|
# minor frequency: |
|
|
|
if ($spec->{'minorfreq'} != 0) { |
|
$result .= "set m$type $spec->{'minorfreq'}\n"; |
|
} |
|
} elsif ($target eq 'tex' ) { |
|
$result .= "set $type font " . '"Helvetica,22"' ."\n"; |
|
} |
|
|
|
|
|
return $result; |
|
} |
|
|
##------------------------------------------------------- write_gnuplot_file |
##------------------------------------------------------- write_gnuplot_file |
sub write_gnuplot_file { |
sub write_gnuplot_file { |
Line 1765 sub write_gnuplot_file {
|
Line 1912 sub write_gnuplot_file {
|
$gnuplot_input .= "set samples $Apache::lonplot::plot{'samples'}\n"; |
$gnuplot_input .= "set samples $Apache::lonplot::plot{'samples'}\n"; |
# title, xlabel, ylabel |
# title, xlabel, ylabel |
# titles |
# titles |
my $extra_space_x = ($xtics{'location'} eq 'axis') ? ' 0, -0.5 ' : ''; |
my $extra_space_x = ($xtics{'location'} eq 'axis') ? ' offset 0, -0.5 ' : ''; |
my $extra_space_y = ($ytics{'location'} eq 'axis') ? ' -0.5, 0 ' : ''; |
my $extra_space_y = ($ytics{'location'} eq 'axis') ? ' offset -0.5, 0 ' : ''; |
|
|
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$gnuplot_input .= "set title \"$title\" font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($title)) ; |
$gnuplot_input .= "set title \"$title\" font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($title)) ; |
Line 1778 sub write_gnuplot_file {
|
Line 1925 sub write_gnuplot_file {
|
$gnuplot_input .= "set ylabel \"$ylabel\" $extra_space_y \n" if (defined($ylabel)); |
$gnuplot_input .= "set ylabel \"$ylabel\" $extra_space_y \n" if (defined($ylabel)); |
} |
} |
# tics |
# tics |
if (%xtics) { |
$gnuplot_input .= &generate_tics('xtics', \%xtics, $target); |
$gnuplot_input .= "set xtics $xtics{'location'} "; |
|
$gnuplot_input .= ( $xtics{'mirror'} eq 'on'?"mirror ":"nomirror "); |
$gnuplot_input .= &generate_tics('ytics', \%ytics, $target); |
$gnuplot_input .= "$xtics{'start'}, "; |
|
$gnuplot_input .= "$xtics{'increment'}, "; |
|
$gnuplot_input .= "$xtics{'end'} "; |
|
if ($target eq 'tex') { |
|
$gnuplot_input .= 'font "Helvetica,22"'; # Needed in iso 8859-1 enc. |
|
} |
|
$gnuplot_input .= "\n"; |
|
if ($xtics{'minorfreq'} != 0) { |
|
$gnuplot_input .= "set mxtics ".$xtics{'minorfreq'}."\n"; |
|
} |
|
} else { |
|
if ($target eq 'tex') { |
|
$gnuplot_input .= 'set xtics font "Helvetica,22"'."\n"; # needed in iso 8859-1 enc |
|
} |
|
} |
|
if (%ytics) { |
|
$gnuplot_input .= "set ytics $ytics{'location'} "; |
|
$gnuplot_input .= ( $ytics{'mirror'} eq 'on'?"mirror ":"nomirror "); |
|
$gnuplot_input .= "$ytics{'start'}, "; |
|
$gnuplot_input .= "$ytics{'increment'}, "; |
|
$gnuplot_input .= "$ytics{'end'} "; |
|
if ($target eq 'tex') { |
|
$gnuplot_input .= 'font "Helvetica,22"'; # Needed in iso-8859-1 encoding. |
|
} |
|
$gnuplot_input .= "\n"; |
|
if ($ytics{'minorfreq'} != 0) { |
|
$gnuplot_input .= "set mytics ".$ytics{'minorfreq'}."\n"; |
|
} |
|
} else { |
|
if ($target eq 'tex') { |
|
$gnuplot_input .= 'set ytics font "Helvetica,22"'."\n"; # Needed for iso 8859-1 enc. |
|
} |
|
} |
|
# axis |
# axis |
if (%axis) { |
if (%axis) { |
if ($axis{'xformat'} ne 'on') { |
if ($axis{'xformat'} ne 'on') { |
Line 1876 sub write_gnuplot_file {
|
Line 1991 sub write_gnuplot_file {
|
$gnuplot_input .= ' '.$label->{'justify'}; |
$gnuplot_input .= ' '.$label->{'justify'}; |
|
|
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$gnuplot_input .=' font "'.$font_properties->{'printname'}.','.$fontsize.'pt"' ; |
$gnuplot_input .=' font "'.$font_properties->{'printname'}.','.$fontsize.'pt"'; |
|
} |
|
if (($label->{'zlayer'} eq 'front') || ($label->{'zlayer'} eq 'back')) { |
|
$gnuplot_input .= ' '.$label->{'zlayer'}; |
} |
} |
$gnuplot_input .= $/; |
$gnuplot_input .= $/; |
} |
} |
Line 1893 sub write_gnuplot_file {
|
Line 2011 sub write_gnuplot_file {
|
# |
# |
my $linestyle_index = 50; |
my $linestyle_index = 50; |
my $line_width = ''; |
my $line_width = ''; |
|
my $plots = ''; |
|
|
# If arrows are needed there will be an arrow style for each as well: |
# If arrows are needed there will be an arrow style for each as well: |
# |
# |
|
|
my $arrow_style_index = 50; |
my $arrow_style_index = 50; |
|
|
my $plot_command; |
|
my $plot_type; |
|
|
|
for (my $i = 0;$i<=$#curves;$i++) { |
for (my $i = 0;$i<=$#curves;$i++) { |
$curve = $curves[$i]; |
$curve = $curves[$i]; |
$plot_command.= ', ' if ($i > 0); |
my $plot_command = ''; |
|
my $plot_type = ''; |
|
if ($i > 0) { |
|
$plot_type = ', '; |
|
} |
if ($target eq 'tex') { |
if ($target eq 'tex') { |
$curve->{'linewidth'} *= 2; |
$curve->{'linewidth'} *= 2; |
} |
} |
$line_width = $curve->{'linewidth'}; |
$line_width = $curve->{'linewidth'}; |
if (exists($curve->{'function'})) { |
if (exists($curve->{'function'})) { |
$plot_type = |
$plot_type .= |
$curve->{'function'}.' title "'. |
$curve->{'function'}.' title "'. |
$curve->{'name'}.'" with '. |
$curve->{'name'}.'" with '. |
$curve->{'linestyle'}; |
$curve->{'linestyle'}; |
Line 1934 sub write_gnuplot_file {
|
Line 2054 sub write_gnuplot_file {
|
print $fh $datatext; |
print $fh $datatext; |
close($fh); |
close($fh); |
# generate gnuplot text |
# generate gnuplot text |
$plot_type = '"'.$datafilename.'" title "'. |
$plot_type .= '"'.$datafilename.'" title "'. |
$curve->{'name'}.'" with '. |
$curve->{'name'}.'" with '. |
$curve->{'linestyle'}; |
$curve->{'linestyle'}; |
} |
} |
Line 1956 sub write_gnuplot_file {
|
Line 2076 sub write_gnuplot_file {
|
my $color = $curve->{'color'}; |
my $color = $curve->{'color'}; |
$color =~ s/^x/#/; # Convert xhex color -> #hex 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') || |
if (($curve->{'linestyle'} eq 'points') || |
($curve->{'linestyle'} eq 'linespoints') || |
($curve->{'linestyle'} eq 'linespoints') || |
Line 1990 sub write_gnuplot_file {
|
Line 2106 sub write_gnuplot_file {
|
$arrow_style_index++; |
$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 |
# The condition below is because gnuplot lumps the linestyle in with the |
# arrowstyle _sigh_. |
# arrowstyle _sigh_. |
Line 2000 sub write_gnuplot_file {
|
Line 2116 sub write_gnuplot_file {
|
$plot_command.= " ls $linestyle_index"; |
$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. |
$linestyle_index++; # Each curve get a unique linestyle. |
} |
} |
|
$gnuplot_input .= 'plot '.$plots; |
# Write the output to a file. |
# Write the output to a file. |
|
|
|
# &Apache::lonnet::logthis($gnuplot_input); # uncomment to log the gnuplot input. |
open (my $fh, "> $tmpdir$filename.data"); |
open (my $fh, "> $tmpdir$filename.data"); |
binmode($fh, ':utf8'); |
binmode($fh, ':utf8'); |
print $fh $gnuplot_input; |
print $fh $gnuplot_input; |