Difference between revisions of "Graph Object Wishlist"

From WeBWorK_wiki
Jump to navigation Jump to search
Line 1: Line 1:
'''Graphs '''
+
=== Graphs ===
<p dir="ltr">A Formula object $f has associated with it a graph object, which can be instantiated using
+
* A Formula object $f has associated with it a graph object, which can be instantiated using
$graphf = $f -&gt; graph(<i>options</i>)
+
$graphf = $f ->; graph(''options'')
 
 
with all of the options having default values.
 
with all of the options having default values.
   
Multiple functions can be graphed simultaneously using Graph($f-&gt;graph(<i>options</i>),$g-&gt;graph(<i>options</i>),<i>...</i>) or if the defaults are desired Graph($f,$g,<i>...</i>). The + operator is also overloaded for combining graphs, as in $f-&gt;graph(<i>options</i>)+$g-&gt;graph(<i>options</i>). As another option Graph() can be given an expression as in Graph(“3x^2+8”) in which case the defaults are used, which could also be used in conjunction with plus: Graph(“3x^2+8”)+Graph(“x^4+sin(x)”).
 
  +
* Multiple functions can be graphed simultaneously using
 
  +
Graph($f-&gt;graph(<i>options</i>), $g->graph(''options''),''...'')
Information about what is to be graphed (ie a function of one variable versus a parametric curve in 3-space) is contained in the equation, so the graph function does much of the work in differentiating what information is appropriate, creating uniformity in how the graph is called.
 
  +
or if the defaults are desired
 
  +
Graph($f,$g,<i>...</i>).
The constructor Graph() takes any number of <strong>MathObjects</strong><a href="http://aimwebwork-int.openwebwork.org/moodle/mod/wiki/view.php?id=22&page=MathObjects"> ? </a>or strings which can become <strong>MathObjects</strong><a href="http://aimwebwork-int.openwebwork.org/moodle/mod/wiki/view.php?id=22&page=MathObjects"> ? </a>(originally, the objects understood are Formulas, but eventually it should understand Intervals, Sets, Points, Vectors, Complex Numbers, Reals) and options (specified as key value pairs), including
 
<ul>
 
<li>line color (default red for a single graph, when multiple functions are graphed the functions have different color by default, the colors to be determined by the programmers), weight (1,2,3; default 1) and style (line, dotted, etc.) </li>
 
</ul>
 
 
   
<strong>ex. </strong>$f = Formula(“sin(x)”);There are properties associated to functions (such as color and style) and properties associated to the graph as a whole (such as display and grid).<br />
 
  +
* The + operator is also overloaded for combining graphs, as in $f-&gt;graph(<i>options</i>)+$g-&gt;graph(<i>options</i>).
   
  +
* As another option Graph() can be given an expression as in Graph(“3x^2+8”) in which case the defaults are used, which could also be used in conjunction with plus: Graph(“3x^2+8”)+Graph(“x^4+sin(x)”).
   
$f -&gt; graph(color=&gt;&quot;black&quot;,weight=&gt;3,style=&gt;&quot;dotted&quot;);
 
  +
* Information about what is to be graphed (ie a function of one variable versus a parametric curve in 3-space) is contained in the equation, so the graph function does much of the work in differentiating what information is appropriate, creating uniformity in how the graph is called.
<ul>
 
<li>viewing area is displayed using display. For a 2d graph display=&gt;[1,2] would specify the domain as [1,2] and use defaults for the range. Similarly for a 2d graph dislay=&gt;[[1,2],[3,4]] would do what it should. In 3d graphs display=&gt;[[1,2],[3,4]] and display=&gt;[[1,2],[3,4],[5,6]] would do what one would expect. Display is a global option and is a property of a graph, not the property of a function. <span style="font-weight: bold;">(This option should be called something else, &quot;display is too common&quot;, perhaps window=&gt;[1,2])</span><br /> </li>
 
<li>For a parametric function (of one or two variables) one must use something like parametric_range=&gt;[[1,2],[3,4]] and parametric_vars=&gt;[s,t] to give the variables and ranges for these. Similarly, parametric_range=&gt;[1,2], parametric_vars=&gt;t should work for a function of one parametric variable.<br /></li>
 
</ul>
 
   
  +
* The constructor Graph() takes any number of [[:Category:MathObjects | MathObjects]]
  +
or strings which can become [[:Category:MathObjects | MathObjects]](originally, the objects understood are Formulas, but eventually it should understand Intervals, Sets, Points, Vectors, Complex Numbers, Reals) and options (specified as key value pairs), including
   
In the case of a call of the form Graph(“3x^2+8a”) the variables are taken alphabetically. But, the variables can be ordered explicity (which is important for 3d plots so that the correct orientation of the axes is correct). This can be done by vars=&gt;[x,t].<br />
 
  +
** line color (default red for a single graph, when multiple functions are graphed the functions have different color by default, the colors to be determined by the programmers),
  +
** weight (1,2,3; default 1) and style (line, dotted, etc.) </li>
  +
*** '''ex.'''$f = Formula(“sin(x)”);There are properties associated to functions (such as color and style) and properties associated to the graph as a whole (such as display and grid).<br />
  +
$f -&gt; graph(color=&gt;&quot;black&quot;,weight=&gt;3,style=&gt;&quot;dotted&quot;);
   
  +
** viewing area is displayed using display. For a 2d graph display=&gt;[1,2] would specify the domain as [1,2] and use defaults for the range. Similarly for a 2d graph dislay=&gt;[[1,2],[3,4]] would do what it should. In 3d graphs display=&gt;[[1,2],[3,4]] and display=&gt;[[1,2],[3,4],[5,6]] would do what one would expect. Display is a global option and is a property of a graph, not the property of a function. <span style="font-weight: bold;">(This option should be called something else, &quot;display is too common&quot;, perhaps window=&gt;[1,2])</span><br /> </li>
  +
** For a parametric function (of one or two variables) one must use something like parametric_range=&gt;[[1,2],[3,4]] and parametric_vars=&gt;[s,t] to give the variables and ranges for these. Similarly, parametric_range=&gt;[1,2], parametric_vars=&gt;t should work for a function of one parametric variable.<br />
  +
* In the case of a call of the form Graph(“3x^2+8a”) the variables are taken alphabetically. But, the variables can be ordered explicity (which is important for 3d plots so that the correct orientation of the axes is correct). This can be done by vars=&gt;[x,t].<br />
  +
* If no display is given defaults are used ( [[-10,10], [-10,10]]). BUT, if functions have a domain that is an interval then display is set to be that interval (this is done whenever it can make sense).<br />
  +
* [-10,10] is the default value for each display range. If range is not specified it should determined, using the domain, by determining maximum and minimum values for the function.
   
If no display is given defaults are used ( [[-10,10], [-10,10]]). BUT, if functions have a domain that is an interval then display is set to be that interval (this is done whenever it can make sense).<br />
 
  +
* By default a grid is not displayed. The grid can be turned on using<br />grid =&gt; [spacing1,spacing2] on a two dimensional axis or grid =&gt;[spacing1,spacing2,spacing3] for a three dimensional axis. Spacing specifies the amount space between grid lines. Grid options can be specified by gridopts=&gt; (need more here)
   
  +
An alternative version of grid uses a string of values specifying where each gridline is to be placed, allowing non-uniformly spaced grids to be constructed. If specified gridlines lie outside the domain or range of the graph they are expanded. </li>
   
[-10,10] is the default value for each display range. If range is not specified it should determined, using the domain, by determining maximum and minimum values for the function.
 
<ul>
 
<li>By default a grid is not displayed. The grid can be turned on using<br />grid =&gt; [spacing1,spacing2] on a two dimensional axis or grid =&gt;[spacing1,spacing2,spacing3] for a three dimensional axis. Spacing specifies the amount space between grid lines. Grid options can be specified by gridopts=&gt; (need more here)<br /><br />An alternative version of grid uses a string of values specifying where each gridline is to be placed, allowing non-uniformly spaced grids to be constructed. If specified gridlines lie outside the domain or range of the graph they are expanded. </li>
 
</ul>
 
   
 
<strong>ex. </strong>grid=&gt;[“1,2,5”,”2,3”].
 
<strong>ex. </strong>grid=&gt;[“1,2,5”,”2,3”].

Revision as of 19:55, 27 September 2008

Graphs

  • A Formula object $f has associated with it a graph object, which can be instantiated using
$graphf = $f ->; graph(options) 

with all of the options having default values.

  • Multiple functions can be graphed simultaneously using
Graph($f->graph(options), $g->graph(options),...) 
  or if the defaults are desired  
Graph($f,$g,...). 
  • The + operator is also overloaded for combining graphs, as in $f->graph(options)+$g->graph(options).
  • As another option Graph() can be given an expression as in Graph(“3x^2+8”) in which case the defaults are used, which could also be used in conjunction with plus: Graph(“3x^2+8”)+Graph(“x^4+sin(x)”).
  • Information about what is to be graphed (ie a function of one variable versus a parametric curve in 3-space) is contained in the equation, so the graph function does much of the work in differentiating what information is appropriate, creating uniformity in how the graph is called.

or strings which can become MathObjects(originally, the objects understood are Formulas, but eventually it should understand Intervals, Sets, Points, Vectors, Complex Numbers, Reals) and options (specified as key value pairs), including

    • line color (default red for a single graph, when multiple functions are graphed the functions have different color by default, the colors to be determined by the programmers),
    • weight (1,2,3; default 1) and style (line, dotted, etc.)
      • ex.$f = Formula(“sin(x)”);There are properties associated to functions (such as color and style) and properties associated to the graph as a whole (such as display and grid).
$f -> graph(color=>"black",weight=>3,style=>"dotted"); 
    • viewing area is displayed using display. For a 2d graph display=>[1,2] would specify the domain as [1,2] and use defaults for the range. Similarly for a 2d graph dislay=>[[1,2],[3,4]] would do what it should. In 3d graphs display=>[[1,2],[3,4]] and display=>[[1,2],[3,4],[5,6]] would do what one would expect. Display is a global option and is a property of a graph, not the property of a function. (This option should be called something else, "display is too common", perhaps window=>[1,2])
    • For a parametric function (of one or two variables) one must use something like parametric_range=>[[1,2],[3,4]] and parametric_vars=>[s,t] to give the variables and ranges for these. Similarly, parametric_range=>[1,2], parametric_vars=>t should work for a function of one parametric variable.
  • In the case of a call of the form Graph(“3x^2+8a”) the variables are taken alphabetically. But, the variables can be ordered explicity (which is important for 3d plots so that the correct orientation of the axes is correct). This can be done by vars=>[x,t].
  • If no display is given defaults are used ( [[-10,10], [-10,10]]). BUT, if functions have a domain that is an interval then display is set to be that interval (this is done whenever it can make sense).
  • [-10,10] is the default value for each display range. If range is not specified it should determined, using the domain, by determining maximum and minimum values for the function.
  • By default a grid is not displayed. The grid can be turned on using
    grid => [spacing1,spacing2] on a two dimensional axis or grid =>[spacing1,spacing2,spacing3] for a three dimensional axis. Spacing specifies the amount space between grid lines. Grid options can be specified by gridopts=> (need more here)

An alternative version of grid uses a string of values specifying where each gridline is to be placed, allowing non-uniformly spaced grids to be constructed. If specified gridlines lie outside the domain or range of the graph they are expanded. ex. grid=>[“1,2,5”,”2,3”]. Since grid is used as a switch to turn the gridlines on default values are not specified. By default the grid lines have weight 1, are grey and are dotted, the defaults can be overridden using options. ex. $f->graph(grid =>[2,3], gridcolor=>black,gridweight=>3]);
Graph(“e^x”, display=>[[1,5],[-4,4]] , grid=>[“0,1,3,5”,”2,7”] ,gridcolor=>red]) In this case, since the domain and range are specified the graph would plot over the domain [1,5] and range [-4,4]. Graph(“e^x”, grid=>[“0,1,3,5”,”2,7”] ,gridcolor=>red]) would graph over the range [[0,5],[2,7]]. Note to programmers: this would be easy to implement by constructing a separate graph for each gridline, which would automatically expand the domain and range.

  • Axes:
    Styles
    For 2D graphs you can choose between none, normal and boxed. 3D graphs have the option of none, normal, boxed. The default is normal. ex. axes => “boxed” Tickmarks
    Tickmarks for each axis can be specified either as the number of total ticks on the axis or as a list of values. Axes Labels
    The labels for the axes can be specified using the labels option, the default is [x,y] or [x,y,z] depending on the situation. To specify no axes labels use empty brackets. ex.
    labels=> ["p","r"]
    labels=> [,] Axes Font
    The font type and size for the axes labels. Default is to be filled along with a list of possible fonts and sizes.
    ex.
    axesfont=>[“Arial”,12] Title
    The default is no title.
    ex.
    title => [“Hello”]
  • The output dimensions of the graph (in pixels, points, inches, etc.) are given by the size option with default units of pixels. Defaults will be specified.
    ex.
    size => [200,300]
    size => [2,3,inches]
  • need specs for the tex and output dimensions
  • labeling of a function
  • piecewise function objects, where the domain of each piece will be specified as an interval object, will have special graphing properties:
    1) Whether the endpoint of the interval is open or closed will determine whether a dot or open circle is plotted.
  • whether the x and y (and z) axes have the same scaling
  • viewing angle (for 3d graphs)
  • graphing engine
  • other options depending on the graphing engine . . .
  • Like formula objects geometric objects will have graphs associated with them. For example a square with given dimensions can be plotted in an xy axis with lower left corner at a given point and given line colors, etc.

Graphs know from the Context() when they are created whether they are 2-d or 3-d (or, eventually 1-d, for intervals and sets). They smoothly upgrade to higher dimension when that is reasonable, for example, when a 3-d function is added to a 2-d graph.
Example 1:
$g = Graph($f1,$f2,"x^2 + 2","(3,2)");

Graph takes "(3,2)" to be a point in 2-space.

Example 2:

DESCRIPTION
KEYWORDS()

ENDDESCRIPTION

DOCUMENT(); # This should be the first executable line in the problem.

loadMacros(
"<a href="http://aimwebwork-int.openwebwork.org/webwork2_course_files/ashton_course/show-source.cgi/PGstandard.pl">PGstandard.pl</a>",
"<a href="http://aimwebwork-int.openwebwork.org/webwork2_course_files/ashton_course/show-source.cgi/MathObjects.pl">MathObjects.pl</a>",
"<a href="http://aimwebwork-int.openwebwork.org/webwork2_course_files/ashton_course/show-source.cgi/Graph.pl">Graph.pl</a>",
"<a href="http://aimwebwork-int.openwebwork.org/webwork2_course_files/ashton_course/show-source.cgi/PGcourse.pl">PGcourse.pl</a>",
);

TEXT(beginproblem());
$showPartialCorrectAnswers = 1;

$f = Compute("x^2");
$g = Graph($f,{ymin=>-10,ymax=>100});
$g2 = Graph("x^2/4",{ymin=>-1,ymax=>7,xmin=>3,xmax=>5});

Context()->texStrings;
BEGIN_TEXT
Here should be the graph of \(y = $f\): $BR
\{ $g->plot \} | \{ $g2->plot \} $PAR
END_TEXT
Context()->normalStrings;

ENDDOCUMENT(); # This should be the last executable line in the problem.

Examples

$graph = $f->graph(xmin=>-2, xmax=>7, color=>"red", weight=>2);

$g1 = Compute("2x - 1")->graph;

Methods

The Graph object has two methods:

  • $g->add($f2, color=>"blue");
    $g->add("3xy - y^2");
    The ->add method allows new MathOjbects<a href="http://aimwebwork-int.openwebwork.org/moodle/mod/wiki/view.php?id=22&page=MathOjbects"> ? </a>to be added to an existing graph.
  • $g->plot;
    The ->plot method produces a plot in the format appropriate to the situation. It may produce a PNG file and an <img> tag pointing to it. It may produce a .m file and an <applet> tag which uses it. It may produce TeX code (perhaps an eepic or tikz picture or an \includegraphic). Graph objects stringify by calling the ->plot method.

The . operator serves to "join" two graphs -- the x, y and z ranges of the resulting graph are the smallest intervals which contain the ranges of the original graphs. The objects which were displayed on the original graphs are displayed on the new graph.

Examples

$g = $g1 . $g2;

$g3 .= $f->graph; # This is equivalent to $g3->add($f);

$g4 = $f->graph . $f2->graph . $f3->graph . Compute("x+2")->graph;

For the future

Eventually, Graph objects should also be able to produce

  • implicit plots
  • contour plots
  • parametric equations
  • scatter plots (and various other statistical plots)
  • differential equations plots.
Function options (perhaps we should use the word "formula here instead, 
since that is  what they are):
  - color
  - style (dotted, solid, etc)
Graph Options :
  - display
  - bgcolor
  - grid

A geometric class of objects that can be graphed, for example rectangles.