--- loncom/xml/lonplot.pm 2007/08/28 23:48:39 1.129 +++ loncom/xml/lonplot.pm 2008/05/19 11:49:48 1.139 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.129 2007/08/28 23:48:39 albertel Exp $ +# $Id: lonplot.pm,v 1.139 2008/05/19 11:49:48 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -91,6 +91,12 @@ BEGIN { my $max_str_len = 50; # if a label, title, xlabel, or ylabel text # is longer than this, it will be truncated. +my %linetypes = + ( + solid => 1, + dashed => 0 + ); + my %linestyles = ( lines => 2, # Maybe this will be used in the future @@ -385,6 +391,13 @@ my %label_defaults = description => 'justification of the label text on the plot', edit_type => 'choice', choices => ['left','right','center'] + }, + rotate => { + default => 0, + test => $real_test, + description => 'Rotation of label (degrees)', + edit_type => 'entry', + size => '10', } ); @@ -435,7 +448,7 @@ my %tic_defaults = }, ); -my @axis_edit_order = ('color','xmin','xmax','ymin','ymax'); +my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat'); my %axis_defaults = ( color => { @@ -472,10 +485,25 @@ my %axis_defaults = description => 'Maximum y-value shown in plot', edit_type => 'entry', size => '10' - } + }, + xformat => { + default => 'on', + test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, + description => 'X-axis number formatting', + edit_type => 'choice', + choices => ['on', 'off', '2e', '2f'], + }, + yformat => { + default => 'on', + test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, + description => 'X-axis number formatting', + edit_type => 'choice', + choices => ['on', 'off', '2e', '2f'], + }, + ); -my @curve_edit_order = ('color','name','linestyle','linewidth','pointtype','pointsize','limit'); +my @curve_edit_order = ('color','name','linestyle','linewidth','linetype','pointtype','pointsize','limit'); my %curve_defaults = ( @@ -496,37 +524,44 @@ my %curve_defaults = linestyle => { default => 'lines', test => $linestyle_test, - description => 'Line style', + description => 'Plot with:', edit_type => 'choice', choices => [keys(%linestyles)] }, linewidth => { - default => 2, + default => 1, test => $int_test, - description => 'Line width (may not apply to all line styles)', + description => 'Line width (may not apply to all plot styles)', edit_type => 'choice', choices => [1,2,3,4,5,6,7,8,9,10] }, + linetype => { + default => 'solid', + test => sub {$_[0]=~/^(solid|dashed)$/}, + description => 'Line type (may not apply to all plot styles)', + edit_type => 'choice', + choices => ['solid', 'dashed'] + }, pointsize => { default => 1, test => $pos_real_test, - description => 'Point size (may not apply to all line styles)', + description => 'Point size (may not apply to all plot styles)', edit_type => 'entry', size => '5' }, pointtype => { default => 1, test => $int_test, - description => 'Point type (may not apply to all line styles)', + description => 'Point type (may not apply to all plot styles)', edit_type => 'choice', choices => [0,1,2,3,4,5,6] }, limit => { default => 'closed', - test => sub {$_[0]=~/^(closed|x1|x2|y1|y2)$/}, + test => sub {$_[0]=~/^(above|below|closed|x1|x2|y1|y2)$/}, description => 'Point to fill -- for filledcurves', edit_type => 'choice', - choices => ['closed','x1','x2','y1','y2'] + choices => ['above', 'below', 'closed','x1','x2','y1','y2'] }, ); @@ -786,12 +821,217 @@ sub parse_label { my %lookup = - ('(pi|#960)' => {'tex' => '{/Symbol p}', 'web' => "\x{3C0}"},); + ( # Greek alphabet: + + '(Alpha|#913)' => {'tex' => '{/Symbol A}', 'web' => "\x{391}"}, + '(Beta|#914)' => {'tex' => '{/Symbol B}', 'web' => "\x{392}"}, + '(Chi|#935)' => {'tex' => '{/Symbol C}', 'web' => "\x{3A7}"}, + '(Delta|#916)' => {'tex' => '{/Symbol D}', 'web' => "\x{394}"}, + '(Epsilon|#917)' => {'tex' => '{/Symbol E}', 'web' => "\x{395}"}, + '(Phi|#934)' => {'tex' => '{/Symbol F}', 'web' => "\x{3A6}"}, + '(Gamma|#915)' => {'tex' => '{/Symbol G}', 'web' => "\x{393}"}, + '(Eta|#919)' => {'tex' => '{/Symbol H}', 'web' => "\x{397}"}, + '(Iota|#921)' => {'tex' => '{/Symbol I}', 'web' => "\x{399}"}, + '(Kappa|#922)' => {'tex' => '{/Symbol K}', 'web' => "\x{39A}"}, + '(Lambda|#923)' => {'tex' => '{/Symbol L}', 'web' => "\x{39B}"}, + '(Mu|#924)' => {'tex' => '{/Symbol M}', 'web' => "\x{39C}"}, + '(Nu|#925)' => {'tex' => '{/Symbol N}', 'web' => "\x{39D}"}, + '(Omicron|#927)' => {'tex' => '{/Symbol O}', 'web' => "\x{39F}"}, + '(Pi|#928)' => {'tex' => '{/Symbol P}', 'web' => "\x{3A0}"}, + '(Theta|#920)' => {'tex' => '{/Symbol Q}', 'web' => "\x{398}"}, + '(Rho|#929)' => {'tex' => '{/Symbol R}', 'web' => "\x{3A1}"}, + '(Sigma|#931)' => {'tex' => '{/Symbol S}', 'web' => "\x{3A3}"}, + '(Tau|#932)' => {'tex' => '{/Symbol T}', 'web' => "\x{3A4}"}, + '(Upsilon|#933)' => {'tex' => '{/Symbol U}', 'web' => "\x{3A5}"}, + '(Omega|#937)' => {'tex' => '{/Symbol W}', 'web' => "\x{3A9}"}, + '(Xi|#926)' => {'tex' => '{/Symbol X}', 'web' => "\x{39E}"}, + '(Psi|#936)' => {'tex' => '{/Symbol Y}', 'web' => "\x{3A8}"}, + '(Zeta|#918)' => {'tex' => '{/Symbol Z}', 'web' => "\x{396}"}, + '(alpha|#945)' => {'tex' => '{/Symbol a}', 'web' => "\x{3B1}"}, + '(beta|#946)' => {'tex' => '{/Symbol b}', 'web' => "\x{3B2}"}, + '(chi|#967)' => {'tex' => '{/Symbol c}', 'web' => "\x{3C7}"}, + '(delta|#948)' => {'tex' => '{/Symbol d}', 'web' => "\x{3B4}"}, + '(epsilon|#949)' => {'tex' => '{/Symbol e}', 'web' => "\x{3B5}"}, + '(phi|#966)' => {'tex' => '{/Symbol f}', 'web' => "\x{3C6}"}, + '(gamma|#947)' => {'tex' => '{/Symbol g}', 'web' => "\x{3B3}"}, + '(eta|#951)' => {'tex' => '{/Symbol h}', 'web' => "\x{3B7}"}, + '(iota|#953)' => {'tex' => '{/Symbol i}', 'web' => "\x{3B9}"}, + '(kappa|#954)' => {'tex' => '{/Symbol k}', 'web' => "\x{3BA}"}, + '(lambda|#955)' => {'tex' => '{/Symbol k}', 'web' => "\x{3BB}"}, + '(mu|#956)' => {'tex' => '{/Symbol m}', 'web' => "\x{3BC}"}, + '(nu|#957)' => {'tex' => '{/Symbol n}', 'web' => "\x{3BD}"}, + '(omicron|#959)' => {'tex' => '{/Symbol o}', 'web' => "\x{3BF}"}, + '(pi|#960)' => {'tex' => '{/Symbol p}', 'web' => "\x{3C0}"}, + '(theta|#952)' => {'tex' => '{/Symbol q}', 'web' => "\x{3B8}"}, + '(rho|#961)' => {'tex' => '{/Symbol r}', 'web' => "\x{3C1}"}, + '(sigma|#963)' => {'tex' => '{/Symbol s}', 'web' => "\x{3C3}"}, + '(tau|#964)' => {'tex' => '{/Symbol t}', 'web' => "\x{3C4}"}, + '(upsilon|#965)' => {'tex' => '{/Symbol u}', 'web' => "\x{3C5}"}, + '(omega|#969)' => {'tex' => '{/Symbol w}', 'web' => "\x{3C9}"}, + '(xi|#958)' => {'tex' => '{/Symbol x}', 'web' => "\x{3BE}"}, + '(psi|#968)' => {'tex' => '{/Symbol y}', 'web' => "\x{3C8}"}, + '(zeta|#950)' => {'tex' => '{/Symbol z}', 'web' => "\x{3B6}"}, + '(thetasym|#977)' => {'tex' => '{/Symbol \165}', 'web' => "\x{3d1}"}, + '(upsih|#978)' => {'tex' => '{/Symbol \241}', 'web' => "\x{3d2}"}, + '(piv|#982)' => {'tex' => '{/Symbol \166}', 'web' => "\x{3d6}"}, + + + # Punctuation: + + '(quot|#034)' => {'tex' => '\42', 'web' => '\42'}, + '(amp|#038)' => {'tex' => '\46', 'web' => '\46'}, + '(lt|#060)' => {'tex' => '\74', 'web' => '\74'}, + '(gt|#062)' => {'tex' => '\76', 'web' => '\76'}, + '#131' => {'tex' => '{/Symbol \246}', 'web' => "\x{192}"}, + '#132' => {'tex' => '{/Text \271}', 'web' => "\x{201e}"}, + '#133' => {'tex' => '{/Symbol \274}', 'web'=> "\x{2026}"}, + '#134' => {'tex' => '{/Text \262}', 'web' => "\x{2020}"}, + '#135' => {'tex' => '{/Text \263}', 'web' => "\x{2021}"}, + '#136' => {'tex' => '\\\\^', 'web' => '\\\\^'}, + '#137' => {'tex' => '{/Text \275}', 'web' => "\x{2030}"}, + '#138' => {'tex' => 'S', 'web' => "\x{160}"}, # no S-caron in ps fonts. + '#139' => {'tex' => '<', 'web' => '<'}, + '#140' => {'tex' => '{/Text \352}', 'web' => "\x{152}"}, + '#145' => {'tex' => '\140', 'web' => "\x{2018}"}, + '#146' => {'tex' => '\47', 'web' => "\x{2019}"}, + '#147' => {'tex' => '{/Text \252}', 'web' => "\x{201c}"}, + '#148' => {'tex' => '{/Text \315}', 'web' => '\\"'}, + '#149' => {'tex' => '{/Symbol \267}', 'web' => "\x{2022}"}, + '#150' => {'tex' => '{/Text \55}', 'web' => "\x{2013}"}, #Untested here en dash + '#151' => {'tex' => '{/Symbol \55}', 'web' => "\x{2014}"}, # em dash + '#152' => {'tex' => '~', 'web' => '~'}, + '#153' => {'tex' => '{/Text \324}', 'web' => "\x{2122}"}, # trademark + + # Accented letters, and other furreign language glyphs. + + '#154' => {'tex' => 's', 'web' => "\x{161}"}, # small s-caron no ps. + '#155' => {'tex' => '>', 'web' => '\76'}, # > + '#156' => {'tex' => '{/Text \372}', 'web' => "\x{153}"}, # oe ligature. + '#159', => {'tex' => 'Y', 'web' => "\x{178}"}, # Y-umlaut - can't print + '(nbsp|#160)' => {'tex' => ' ', 'web' => ' '}, # non breaking space. + '(iexcl|#161)' => {'tex' => '{/Text \241}', 'web' => "\x{a1}"}, # inverted ! + '(cent|#162)' => {'tex' => '{/Text \242}', 'web' => "\x{a2}"}, # Cent currency. + '(pound|#163}' => {'tex' => '{/Text \243}', 'web' => "\x{a3}"}, # GB Pound currency. + '(curren|#164)' => {'tex' => '{/Text \250}', 'web' => "\x{a4}"}, # Generic currency symb. + '(yen|#165)' => {'tex' => '{/Text \245}', 'web' => "\x{a5}"}, # Yen currency. + '(brvbar|#166)' => {'tex' => '{/Symbol \174}', 'web' => "\x{a6}"}, # Broken vert bar no print. + '(sect|#167)' => {'tex' => '{\247}', 'web' => "\x{a7}"}, # Section symbol. + '(uml|#168)' => {'tex' => '{\250}', 'web' => "\x{a8}"}, # 'naked' umlaut. + '(copy|#169)' => {'tex' => '{/Symbol \343}', 'web' => "\x{a9}"}, # Copyright symbol. + '(ordf|#170)' => {'tex' => '{/Text \343}', 'web' => "\x{aa}"}, # Feminine ordinal. + '(laquo|#171)' => {'tex' => '{/Text \253}', 'web' => "\x{ab}"}, # << quotes. + '(not|#172)' => {'tex' => '\254', 'web' => "\x{ac}"}, # Logical not. + '(shy|#173)' => {'tex' => '-', 'web' => "\x{ad}"}, # soft hyphen. + '(reg|#174)' => {'tex' => '{/Symbol \342}', 'web' => "\x{ae}"}, # Registered tm. + '(macr|#175)' => {'tex' => '^{-}', 'web' => "\x{af}"}, # 'naked' macron (overbar). + '(deg|#176)' => {'tex' => '{/Text \312}', 'web' => "\x{b0}"}, # Degree symbo.. + '(plusmn|#177)' => {'tex' => '{/Symbol \261}', 'web' => "\x{b1}"}, # +/- symbol. + '(sup2|#178)' => {'tex' => '^2', 'web' => "\x{b2}"}, # Superscript 2. + '(sup3|#179)' => {'tex' => '^3', 'web' => "\x{b3}"}, # Superscript 3. + '(acute|#180)' => {'tex' => '{/Text \302}', 'web' => "\x{b4}"}, # 'naked' acute accent. + '(micro|#181)' => {'tex' => '{/Symbol \155}', 'web' => "\x{b5}"}, # Micro (small mu). + '(para|#182)' => {'tex' => '{/Text \266}', 'web' => "\x{b6}"}, # Paragraph symbol. + '(middot|#183)' => {'tex' => '^.', 'web' => "\x{b7}"}, # middle dot (maybe text 267 is better)? + '(cedil|#184)' => {'tex' => '\233', 'web' => "\x{b8}"}, # 'naked' cedilla. + '(sup1|#185)' => {'tex' => '^1', 'web' => "\x{b9}"}, # superscript 1. + '(ordm|#186)' => {'tex' => '\353', 'web' => "\x{ba}"}, # masculine ordinal. + '(raquo|#187)', => {'tex' => '\273', 'web' => "\x{bb}"}, # Right angle quotes. + '(frac14|#188)' => {'tex' => '\274', 'web' => "\x{bc}"}, # 1/4. + '(frac12|#189)' => {'tex' => '\275', 'web' => "\x{bd}"}, # 1/2. + '(frac34|#190)' => {'tex' => '\276', 'web' => "\x{be}"}, # 3/4 + '(iquest|#191)' => {'tex' => '{/Text \277}', 'web' => "\x{bf}"}, # Inverted ? + '(Agrave|#192)' => {'tex' => '\300', 'web' => "\x{c0}"}, # A Grave. + '(Aacute|#193)' => {'tex' => '\301', 'web' => "\x{c1}"}, # A Acute. + '(Acirc|#194)' => {'tex' => '\302', 'web' => "\x{c2}"}, # A Circumflex. + '(Atilde|#195)' => {'tex' => '\303', 'web' => "\x{c3}"}, # A tilde. + '(Auml|#196)' => {'tex' => '\304', 'web' => "\x{c4}"}, # A umlaut. + '(Aring|#197)' => {'tex' => '\305', 'web' => "\x{c5}"}, # A ring. + '(AElig|#198)' => {'tex' => '\306', 'web' => "\x{c6}"}, # AE ligature. + '(Ccedil|#199)' => {'tex' => '\307', 'web' => "\x{c7}"}, # C cedilla + '(Egrave|#200)' => {'tex' => '\310', 'web' => "\x{c8}"}, # E Accent grave. + '(Eacute|#201)' => {'tex' => '\311', 'web' => "\x{c9}"}, # E acute accent. + '(Ecirc|#202)' => {'tex' => '\312', 'web' => "\x{ca}"}, # E Circumflex. + '(Euml|#203)' => {'tex' => '\313', 'web' => "\x{cb}"}, # E umlaut. + '(Igrave|#204)' => {'tex' => '\314', 'web' => "\x{cc}"}, # I grave accent. + '(Iacute|#205)' => {'tex' => '\315', 'web' => "\x{cd}"}, # I acute accent. + '(Icirc|#206)' => {'tex' => '\316', 'web' => "\x{ce}"}, # I circumflex. + '(Iuml|#207)' => {'tex' => '\317', 'web' => "\x{cf}"}, # I umlaut. + '(ETH|#208)' => {'tex' => '\320', 'web' => "\x{d0}"}, # Icelandic Cap eth. + '(Ntilde|#209)' => {'tex' => '\321', 'web' => "\x{d1}"}, # Ntilde (enyan). + '(Ograve|#210)' => {'tex' => '\322', 'web' => "\x{d2}"}, # O accent grave. + '(Oacute|#211)' => {'tex' => '\323', 'web' => "\x{d3}"}, # O accent acute. + '(Ocirc|#212)' => {'tex' => '\324', 'web' => "\x{d4}"}, # O circumflex. + '(Otilde|#213)' => {'tex' => '\325', 'web' => "\x{d5}"}, # O tilde. + '(Ouml|#214)' => {'tex' => '\326', 'web' => "\x{d6}"}, # O umlaut. + '(times|#215)' => {'tex' => '\327', 'web' => "\x{d7}"}, # Times symbol. + '(Oslash|#216)' => {'tex' => '\330', 'web' => "\x{d8}"}, # O slash. + '(Ugrave|#217)' => {'tex' => '\331', 'web' => "\x{d9}"}, # U accent grave. + '(Uacute|#218)' => {'tex' => '\332', 'web' => "\x{da}"}, # U accent acute. + '(Ucirc|#219)' => {'tex' => '\333', 'web' => "\x{db}"}, # U circumflex. + '(Uuml|#220)' => {'tex' => '\334', 'web' => "\x{dc}"}, # U umlaut. + '(Yacute|#221)' => {'tex' => '\335', 'web' => "\x{dd}"}, # Y accent acute. + '(THORN|#222)' => {'tex' => '\336', 'web' => "\x{de}"}, # Icelandic thorn. + '(szlig|#223)' => {'tex' => '\337', 'web' => "\x{df}"}, # German sharfes s. + '(agrave|#224)' => {'tex' => '\340', 'web' => "\x{e0}"}, # a accent grave. + '(aacute|#225)' => {'tex' => '\341', 'web' => "\x{e1}"}, # a grave. + '(acirc|#226)' => {'tex' => '\342', 'web' => "\x{e2}"}, # a circumflex. + '(atilde|#227)' => {'tex' => '\343', 'web' => "\x{e3}"}, # a tilde. + '(auml|#228)' => {'tex' => '\344', 'web' => "\x{e4}"}, # a umlaut + '(aring|#229)' => {'tex' => '\345', 'web' => "\x{e5}"}, # a ring on top. + '(aelig|#230)' => {'tex' => '\346', 'web' => "\x{e6}"}, # ae ligature. + '{ccedil|#231)' => {'tex' => '\347', 'web' => "\x{e7}"}, # C cedilla + '(egrave|#232)' => {'tex' => '\350', 'web' => "\x{e8}"}, # e accent grave. + '(eacute|#233)' => {'tex' => '\351', 'web' => "\x{e9}"}, # e accent acute. + '(ecirc|#234)' => {'tex' => '\352', 'web' => "\x{ea}" }, # e circumflex. + '(euml|#235)' => {'tex' => '\353', 'web' => "\x{eb}"}, # e umlaut. + '(igrave|#236)' => {'tex' => '\354', 'web' => "\x{ec}"}, # i grave. + '(iacute|#237}' => {'tex' => '\355', 'web' => "\x{ed}"}, # i acute. + '(icirc|#238}' => {'tex' => '\356', 'web' => "\x{ee}"}, # i circumflex. + '(iuml|#239)' => {'tex' => '\357', 'web' => "\x{ef}"}, # i umlaut. + '(eth|#240)' => {'tex' => '\360', 'web' => "\x{f0}"}, # Icelandic eth. + '(ntilde|#241)' => {'tex' => '\361', 'web' => "\x{f1}"}, # n tilde. + '(ograve|#242)' => {'tex' => '\362', 'web' => "\x{f2}"}, # o grave. + '(oacute|#243)' => {'tex' => '\363', 'web' => "\x{f3}"}, # o acute. + '(ocirc'|#244)' => {'tex' => '\364', 'web' => "\x{f4}"}, # o circumflex. + '(otilde|#245)' => {'tex' => '\365', 'web' => "\x{f5}"}, # o tilde. + '(ouml|#246)' => {'tex' => '\366', 'web' => "\x{f6}"}, # o umlaut. + '(divide|#247)' => {'tex' => '\367', 'web' => "\x{f7}"}, # division symbol + '(oslash|#248)' => {'tex' => '\370', 'web' => "\x{f8}"}, # o slashed. + '(ugrave|#249)' => {'tex' => '\371', 'web' => "\x{f9}"}, # u accent grave. + '(uacute|#250)' => {'tex' => '\372', 'web' => "\x{fa}"}, # u acute. + '(ucirc|#251)' => {'tex' => '\373', 'web' => "\x{fb}"}, # u circumflex. + '(uuml|#252)' => {'tex' => '\374', 'web' => "\x{fc}"}, # u umlaut. + '(yacute|#253)' => {'tex' => '\375', 'web' => "\x{fd}"}, # y acute accent. + '(thorn|#254)' => {'tex' => '\376', 'web' => "\x{fe}"}, # small thorn (icelandic). + '(yuml|#255)' => {'tex' => '\377', 'web' => "\x{ff}"}, # y umlaut. + + # Latin extended A entities: + + '(OElig|#338)' => {'tex' => '{/Text \352}', 'web' => "\x{152}"}, # OE ligature. + '(oelig|#339)' => {'tex' => '{/Text \372}', 'web' => "\x{153}"}, # oe ligature. + '(Scaron|#352)' => {'tex' => 'S', 'web' => "\x{160}"}, # S caron no printable. + '(scaron|#353)' => {'tex' => 's', 'web' => "\x{161}"}, # s caron no printable. + '(Yuml|#376)' => {'tex' => 'Y', 'web' => "\x{178}"}, # Y umlaut - no printable. + + # Latin extended B. + + '(fnof|#402)' => {'tex' =>'{/Symbol 246}', 'web' => "\x{192}"}, # f with little hook. + + # Standalon accents: + + '(circ|#710)' => {'tex' => '^', 'web' => '^'}, # circumflex. + '(tilde|#732)' => {'tex' => '~', 'web' => '~'}, # tilde. + + + + ); + sub replace_entities { my ($target,$text) = @_; $text =~ s{([_^~\{\}]|\\\\)}{\\\\$1}g; while (my ($re, $replace) = each(%lookup)) { + my $repl = $replace->{$target}; $text =~ s/&$re;/$replace->{$target}/g; } $text =~ s{(&)}{\\\\$1}g; @@ -1321,6 +1561,22 @@ sub write_gnuplot_file { } # axis if (%axis) { + if ($axis{'xformat'} ne 'on') { + $gnuplot_input .= "set format x "; + if ($axis{'xformat'} eq 'off') { + $gnuplot_input .= "\"\"\n"; + } else { + $gnuplot_input .= "\"\%.".$axis{'xformat'}."\"\n"; + } + } + if ($axis{'yformat'} ne 'on') { + $gnuplot_input .= "set format y "; + if ($axis{'yformat'} eq 'off') { + $gnuplot_input .= "\"\"\n"; + } else { + $gnuplot_input .= "\"\%.".$axis{'yformat'}."\"\n"; + } + } $gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n"; $gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n"; } @@ -1338,7 +1594,12 @@ sub write_gnuplot_file { my $label; foreach $label (@labels) { $gnuplot_input .= 'set label "'.$label->{'text'}.'" at '. - $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'}; + $label->{'xpos'}.','.$label->{'ypos'}; + if ($label->{'rotate'} ne '') { + $gnuplot_input .= ' rotate by '.$label->{'rotate'}; + } + $gnuplot_input .= ' '.$label->{'justify'}; + if ($target eq 'tex') { $gnuplot_input .=' font "'.$font_properties->{'printname'}.','.$fontsize.'pt"' ; } @@ -1361,7 +1622,6 @@ sub write_gnuplot_file { $curve->{'function'}.' title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; - $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || @@ -1373,7 +1633,17 @@ sub write_gnuplot_file { $gnuplot_input.=' pointsize '.$curve->{'pointsize'}; } elsif ($curve->{'linestyle'} eq 'filledcurves') { $gnuplot_input.= ' '.$curve->{'limit'}; + } elsif ($curve->{'linetype'} ne '' && + $curve->{'linestyle'} eq 'lines') { + $gnuplot_input.= ' linetype '; + $gnuplot_input.= $linetypes{$curve->{'linetype'}}; + $gnuplot_input.= ' linecolor rgb "'; + # convert color from xaaaaaa to #aaaaaa + $curve->{'color'} =~ s/^x/#/; + $gnuplot_input.= $curve->{'color'}.'"'; } + $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; + } elsif (exists($curve->{'data'})) { # Store data values in $datatext my $datatext = ''; @@ -1397,7 +1667,6 @@ sub write_gnuplot_file { $gnuplot_input.= '"'.$datafilename.'" title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; - $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || ($curve->{'linestyle'} eq 'errorbars') || @@ -1408,7 +1677,16 @@ sub write_gnuplot_file { $gnuplot_input.=' pointsize '.$curve->{'pointsize'}; } elsif ($curve->{'linestyle'} eq 'filledcurves') { $gnuplot_input.= ' '.$curve->{'limit'}; + } elsif ($curve->{'linetype'} ne '' && + $curve->{'linestyle'} eq 'lines') { + $gnuplot_input.= ' linetype '; + $gnuplot_input.= $linetypes{$curve->{'linetype'}}; + $gnuplot_input.= ' linecolor rgb "'; + # convert color from xaaaaaa to #aaaaaa + $curve->{'color'} =~ s/^x/#/; + $gnuplot_input.= $curve->{'color'}.'"'; } + $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; } } # Write the output to a file.