--- loncom/xml/lonplot.pm 2012/07/03 11:29:57 1.156 +++ loncom/xml/lonplot.pm 2012/07/04 11:06:57 1.157 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.156 2012/07/03 11:29:57 foxr Exp $ +# $Id: lonplot.pm,v 1.157 2012/07/04 11:06:57 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -98,11 +98,16 @@ BEGIN { my $max_str_len = 50; # if a label, title, xlabel, or ylabel text # is longer than this, it will be truncated. -my %linetypes = +my %linetypes = # For png use these linetypes. ( solid => 1, dashed => 0 ); +my %ps_linetypes = # For ps the line types are different! + ( + solid => 0, + dashed => 7 + ); my %linestyles = ( @@ -1842,8 +1847,6 @@ sub write_gnuplot_file { # type (solid/dashed), color, width # my $linestyle_index = 50; - my $line_type = ''; - my $line_color = ''; my $line_width = ''; my $plot_command; @@ -1855,6 +1858,7 @@ sub write_gnuplot_file { if ($target eq 'tex') { $curve->{'linewidth'} *= 2; } + $line_width = $curve->{'linewidth'}; if (exists($curve->{'function'})) { $plot_type = $curve->{'function'}.' title "'. @@ -1884,27 +1888,55 @@ sub write_gnuplot_file { $curve->{'name'}.'" with '. $curve->{'linestyle'}; } + my $pointtype = ''; + my $pointsize = ''; + if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || ($curve->{'linestyle'} eq 'errorbars') || ($curve->{'linestyle'} eq 'xerrorbars') || ($curve->{'linestyle'} eq 'yerrorbars') || ($curve->{'linestyle'} eq 'xyerrorbars')) { - $plot_command.=' pointtype '.$curve->{'pointtype'}; - $plot_command.=' pointsize '.$curve->{'pointsize'}; + + $pointtype =' pointtype '.$curve->{'pointtype'}; + $pointsize =' pointsize '.$curve->{'pointsize'}; } elsif ($curve->{'linestyle'} eq 'filledcurves') { $plot_command.= ' '.$curve->{'limit'}; - } elsif ($curve->{'linetype'} ne '' && - $curve->{'linestyle'} eq 'lines') { - $plot_command.= ' linetype '; - $plot_command.= $linetypes{$curve->{'linetype'}}; - $plot_command.= ' linecolor rgb "'; - # convert color from xaaaaaa to #aaaaaa - $curve->{'color'} =~ s/^x/#/; - $plot_command.= $curve->{'color'}.'"'; + } + +#elsif ($curve->{'linetype'} ne '' && +# $curve->{'linestyle'} eq 'lines') +# +# +# $plot_command.= ' linetype '; +# $plot_command.= $linetypes{$curve->{'linetype'}}; +# $plot_command.= ' linecolor rgb "'; +# # convert color from xaaaaaa to #aaaaaa +# $curve->{'color'} =~ s/^x/#/; +# $plot_command.= $curve->{'color'}.'"'; +# } + + # Figure out the linestyle: + + my $lt = $curve->{'linetype'} ne '' ? $curve->{'linetype'} + : 'solid'; # Line type defaults to solid. + # The mapping of lt -> the actual gnuplot line type depends on the target: + + if ($target eq 'tex') { + $lt = $ps_linetypes{$lt}; + } else { + $lt = $linetypes{$lt} } - $plot_command.= ' linewidth '.$curve->{'linewidth'}; + + 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; + + $plot_command.= " ls $linestyle_index"; $gnuplot_input .= 'plot ' . $plot_type . ' ' . $plot_command . "\n"; + $linestyle_index++; # Each curve get a unique linestyle. } # Write the output to a file. open (my $fh,">$tmpdir$filename.data");