Annotation of loncom/html/adm/help/tex/Authoring_Piecewise_Plot.tex, revision 1.2

1.1       bowersj2    1: \label{Authoring_Piecewise_Plot}
                      2: Suppose you want to plot a piecewise function similar to the
                      3: following:
                      4: 
                      5: \begin{verbatim}
                      6: f(x) = a*x + b if (x < 4.5)
                      7: f(x) = a*x     if (x >=4.5)
                      8: \end{verbatim}
                      9: 
                     10: The following is the XML representation of a problem with a dynamic
                     11: plot based on this. The work is done in a <script> block that
                     12: generates the data sets used in the plot.
                     13: 
                     14: \begin{verbatim}
                     15:  <script type="loncapa/perl" >
                     16:  $a = &random(2,5,1);
                     17:  $b = &random(3,6,1);
                     18:  
                     19:  for ($x = 0; $x<4.5; $x+= 0.05) {
                     20:      push @X, $x;
                     21:      push @Y, $a*$x + $b;
                     22:  }
                     23:  
                     24:  for ($x = 4.5; $x<=10; $x+= 0.05) {
                     25:      push @X, $x;
                     26:      push @Y, $a*$x;
                     27:  }
                     28:  </script >
                     29:  <gnuplot font="medium" width="500" grid="on" height="400" border="on" 
                     30:           fgcolor="x000000" alttag="dynamically generated plot" align="center" 
                     31:           bgcolor="xffffff" transparent="off" >
                     32:      <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
                     33:       name="">
                     34:          <data >@X</data >
                     35:          <data >@Y</data >
                     36:      </curve >
                     37:  </gnuplot >
                     38: \end{verbatim}
                     39: 
                     40: The above script works, but it produces a plot like this:
                     41: 
                     42: \includegraphics{dynamic_piecewise}
                     43: 
1.2     ! albertel   44: A better solution is to use two separate <curve> statements to plot
1.1       bowersj2   45: two separate curves. So on the second piece of the function we use
                     46: @X2 and @Y2 instead of @X and @Y. Then in the <gnuplot> tag we
                     47: include a second <curve> sub-tag.
                     48: 
                     49: \begin{verbatim}
                     50:  <script type="loncapa/perl" >
                     51:  $a = &random(2,5,1);
                     52:  $b = &random(3,6,1);
                     53:  
                     54:  for ($x = 0; $x<4.5; $x+= 0.05) {
                     55:      push @X, $x;
                     56:      push @Y, $a*$x + $b;
                     57:  }
                     58:  
                     59:  for ($x = 4.5; $x<=10; $x+= 0.05) {
                     60:      push @X2, $x;
                     61:      push @Y2, $a*$x;
                     62:  }
                     63:  </script >
                     64:  <gnuplot font="medium" width="500" grid="on" height="400" border="on" 
                     65:           fgcolor="x000000" alttag="dynamically generated plot" align="center" 
                     66:           bgcolor="xffffff" transparent="off" >
                     67:      <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
                     68:       name="" >
                     69:          <data >@X</data >
                     70:          <data >@Y</data >
                     71:      </curve >
                     72:      <curve linestyle="lines" pointsize="1" pointtype="1" color="x000000" 
                     73:       name="" >
                     74:          <data >@X2</data >
                     75:          <data >@Y2</data >
                     76:      </curve >
                     77:  </gnuplot >
                     78: \end{verbatim}
                     79: 
                     80: \includegraphics{dynamic_piecewise2}
                     81: 
                     82: This is still not a desirable result. Typically one wants an open
                     83: circle or closed circle defining the domain of each
                     84: piece. Unfortunately there is no easy way to do this in gnuplot
                     85: currently. If this effect is desired, perhaps using a static image
                     86: and a randomlabel problem would be a better approach. A second
                     87: solution would be to add data which draws a circle to your curves.

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>