File:  [LON-CAPA] / loncom / html / adm / help / tex / Authoring_Dynamic_Plot.tex
Revision 1.6: download - view: text, annotated - select for diffs
Thu Aug 18 11:36:48 2016 UTC (8 years ago) by raeburn
Branches: MAIN
CVS tags: version_2_12_X, version_2_11_X, version_2_11_5_msu, version_2_11_5, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, HEAD
- Use LaTeX-style single quotes.

    1: \label{Authoring_Dynamic_Plot}
    2: Dynamically generated plots are used to produce graphs which will be
    3: different for each student who views them. The plots are produced by
    4: calling `gnuplot', and in fact the xml tag for the plots is <gnuplot>.
    5: 
    6: Dynamically generated plots should be used in conjunction with a perl
    7: script block which generates the data to be plotted. If you are using
    8: static data a dynamically generated plot is not appropriate because of
    9: the overhead associated with generating the plot. In that case, use a
   10: picture (see \ref{Authoring_Adding_Pictures}).
   11: 
   12: There are a great deal of parameters that can be set for a plot. These
   13: parameters are accessed by including various sub-tags. By default only
   14: the <gnuplot > tag and <curve > tag are present in a plot. The
   15: sub-tags allow you to define the axes of the plot, the presence of a
   16: key, the placement of gridlines, and the title and legends on the
   17: plot. The example given below shows the use of the <axis > sub-tag to
   18: set the domain and range shown in the graph. 
   19: 
   20: Below is an example which produces a simple plot. To use it, create a
   21: new problem and \textbf{Edit XML}. Remove all of the text and replace 
   22: it with the text below: 
   23: 
   24: \begin{verbatim}
   25: 
   26:  <problem >
   27:  <script type="loncapa/perl" >
   28:  $amplitude = &random(3,5,1);
   29:  for ($x=-6.0; $x<=6.0; $x+=0.05) {
   30:      push @X,$x;
   31:      push @Y, $amplitude * sin($x);
   32:  }
   33:  </script >
   34:  <gnuplot font="medium" width="400" grid="on" 
   35:       height="300" border="on" fgcolor="x000000" 
   36:       alttag="dynamically generated plot" align="center"  
   37:       bgcolor="xffffff" transparent="off" >
   38:      <axis ymin="-6.0" ymax="6.0" xmin="-5.0" 
   39:            xmax="5.0" color="x000000" /> 
   40:      <curve 
   41:           linestyle="lines"
   42:           pointtype="1"
   43:           pointsize="1"
   44:           name=""
   45:           color="x000000" >
   46:          <data >@X</data >
   47:          <data >@Y</data >
   48:      </curve >
   49:  </gnuplot >
   50:  <startouttext /><br />
   51:  What is the amplitude of this function?
   52:  <endouttext />
   53:  <numericalresponse answer="$amplitude" >
   54:  <responseparam type="tolerance" default="5%" name="tol" 
   55:       description="Numerical Tolerance" />
   56:  <responseparam name="sig" type="int_range,0-16" default="0,15"  
   57:       description="Significant Figures" />
   58:  </numericalresponse >
   59:  </problem >
   60: 
   61: \end{verbatim}
   62: 
   63: Below is a screenshot (in authoring space) of the resulting plot.
   64: 
   65: \includegraphics{dynamic_plot}
   66: 
   67: It's likely that the above plot doesn't quite look right. It would be
   68: nice to have the gridlines drawn every 1 unit instead of every 2
   69: units. A title, and labels on the axes, would be a nice
   70: addition. Although it's overkill for this example, we can also add a
   71: key for the plot. We can accomplish these changes by inserting
   72: sub-tags into the <gnuplot > tag. 
   73: 
   74: Gridlines can be set using the <xtics > and <ytics > tags. The names
   75: of these tags correspond to the names of the commands used in
   76: gnuplot. We specify the beginning, end, and increment of the tick
   77: marks. Gnuplot only puts gridlines on the tick marks. 
   78: 
   79: Inserting the <title >, <xlabel >, and <ylabel > commands allows us to
   80: set the title and axes labels as one would expect. Inserting a <key >
   81: tag, but not changing any of the information in it, signals gnuplot to
   82: place a key in the graph. If we decide we don't want the key, deleting
   83: the <key > tag will remove it from the graph. 
   84: 
   85: These changes in the xml are shown below and a screenshot of the new
   86: plot is provided as well. 
   87: 
   88: \begin{verbatim}
   89: 
   90:  <problem >
   91:  <script type="loncapa/perl" >
   92:  $amplitude = &random(3,5,1);
   93:  for ($x=-6.0; $x<=6.0; $x+=0.05) {
   94:      push @X,$x;
   95:      push @Y, $amplitude * sin($x);
   96:  }
   97:  </script >
   98:  <gnuplot font="medium" width="400" grid="on" height="300" 
   99:        border="on" fgcolor="x000000" 
  100:        alttag="dynamically generated plot" 
  101:        align="center" bgcolor="xffffff" transparent="off" >
  102:      <key title="" pos="top right" box="off" />
  103:      <ylabel >Y</ylabel >
  104:      <xlabel >X</xlabel >
  105:      <title >A sample plot</title >
  106:      <xtics end="5.0" location="border" start="-5.0" 
  107:             increment="1.0" mirror="on" />
  108:      <ytics end="6.0" location="border" start="-6.0" 
  109:             increment="1.0" mirror="on" />
  110:      <axis ymin="-6.0" ymax="6.0" xmin="-5.0" 
  111:             xmax="5.0" color="x000000" /> 
  112:      <curve linestyle="lines" pointtype="1" pointsize="1" name="f(x)"   
  113:          color="x000000">
  114:          <data >@X</data >
  115:          <data >@Y</data >
  116:      </curve >
  117:  </gnuplot >
  118:  <startouttext />
  119:  <br />
  120:  What is the amplitude of this function?
  121:  <endouttext />
  122:  <numericalresponse answer="$amplitude" >
  123:  <responseparam type="tolerance" default="5%" name="tol" 
  124:       description="Numerical Tolerance" />
  125:  <responseparam name="sig" type="int_range,0-16" default="0,15"  
  126:       description="Significant Figures" />
  127:  </numericalresponse > 
  128:  </problem >
  129: 
  130: \end{verbatim}
  131: 
  132: \includegraphics{dynamic_plot2}
  133: 
  134: It is also possible to override the attributes of the <xtics > and <ytics > by
  135: nesting <tic > tags inside those tags.   For each <tic > tag, the ``location''
  136: attribute allows you to specify the location of the tic mark and the contents
  137: of the tag allow you to specify the tic mark label.  The following
  138: fragment of XML demonstrates an X axis that is labeled with the months of
  139: the year.  Note that the ``rotate'' attribute of the <xtics > tag will rotate
  140: the text of the tic marks if the output device supports rotated text:
  141: 
  142: \begin{verbatim}
  143: ...
  144: <gnuplot ...
  145: 
  146: <xtics rotate='on'>
  147:    <tic location='1'>January</tic>
  148:    <tic location='2'>February</tic>
  149:    <tic location='3'>March</tic>
  150:    <tic location='4'>April</tic>
  151:    <tic location='5'>May</tic>
  152:    <tic location='6'>June</tic>
  153:    <tic location='7'>July</tic>
  154:    <tic location='8'>August</tic>
  155:    <tic location='9'>September</tic>
  156:    <tic location='10'>October</tic>
  157:    <tic location='11'>November</tic>
  158:    <tic location='12'>December</tic>
  159: </xtics>
  160: <ytics end="6.0" location="border" start="-6.0" 
  161:        increment="1.0" mirror="on" />
  162: 
  163: ...
  164: </gnuplot>
  165: 
  166: \end{verbatim}
  167: 
  168: The values of location can be arbitrary and need not even be at regular
  169: intervals.

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