Annotation of loncom/html/adm/help/tex/Authoring_Piecewise_Plot.tex, revision 1.1
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:
! 44: A better solution is to use two seperate <curve> statements to plot
! 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>