Difference between revisions of "GraphsInTables"
Line 6: | Line 6: | ||
<em>This PG code shows how to put graphs into tables so that they will be displayed compactly and a proper size in both HTML and TeX modes.</em> |
<em>This PG code shows how to put graphs into tables so that they will be displayed compactly and a proper size in both HTML and TeX modes.</em> |
||
<ul type="square"> |
<ul type="square"> |
||
− | <li>Example 1: Creating an array of graphs with two columns that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl</li> |
+ | <li>Example 1: Creating an array of graphs with two columns (or three columns) that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl</li> |
− | <li>Example 2: |
+ | <li>Example 2: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl</li> |
− | <li>Example 3: |
+ | <li>Example 3: Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl</li> |
− | <li>Example 4: |
+ | <li>Example 4: (Not recommended) Using imageRow</li> |
− | <li>Example 5: (Not recommended) Using imageRow</li> |
||
</ul> |
</ul> |
||
</p> |
</p> |
||
Line 87: | Line 87: | ||
$graph[3]->lb(new Label(0.15,9.75,'y','black','center','middle')); |
$graph[3]->lb(new Label(0.15,9.75,'y','black','center','middle')); |
||
− | for |
+ | for $i (0..3) { |
plot_functions( $graph[$i], $f[$i]); |
plot_functions( $graph[$i], $f[$i]); |
||
$graph[$i]=image(insertGraph($graph[$i]), |
$graph[$i]=image(insertGraph($graph[$i]), |
||
Line 114: | Line 114: | ||
<p> |
<p> |
||
Pick one equation and graph at random (using <code>$k</code>) to be the correct choice. Shuffle the graphs using a permutation, and use the inverse permutation to recall the correct answer in the answer evaluation section. |
Pick one equation and graph at random (using <code>$k</code>) to be the correct choice. Shuffle the graphs using a permutation, and use the inverse permutation to recall the correct answer in the answer evaluation section. |
||
+ | </p> |
||
+ | <p> |
||
+ | If, instead, we had six graphs and desired a three-column array of graphs, we would want to change <code>tex_size=>310</code> as in the following bit of code. |
||
+ | <pre> |
||
+ | for $i (0..5) { |
||
+ | plot_functions( $graph[$i], $f[$i]); |
||
+ | $graph[$i]=image(insertGraph($graph[$i]), |
||
+ | width=>200,height=>200,tex_size=>310); |
||
+ | } |
||
+ | </pre> |
||
</p> |
</p> |
||
</td> |
</td> |
||
Line 155: | Line 165: | ||
<b>Main Text:</b> |
<b>Main Text:</b> |
||
Use commands such as <code>BeginTable()</code>, provided by <code>unionTables.pl</code> to nicely display the graphs. |
Use commands such as <code>BeginTable()</code>, provided by <code>unionTables.pl</code> to nicely display the graphs. |
||
+ | </p> |
||
+ | <p> |
||
+ | If, instead, we had six graphs we wanted to display in three columns, we would use the following code. |
||
+ | <pre> |
||
+ | \{ |
||
+ | BeginTable(). |
||
+ | AlignedRow([$fig[0],$fig[1],$fig[2]]). |
||
+ | TableSpace(5,0). |
||
+ | AlignedRow(["A","B","C"]). |
||
+ | TableSpace(25,6). |
||
+ | AlignedRow([$fig[3],$fig[4],$fig[5]]). |
||
+ | TableSpace(5,0). |
||
+ | AlignedRow(["D","E","F"]). |
||
+ | EndTable(). |
||
+ | $BR.$BCENTER."(Click on a graph to enlarge it)".$ECENTER |
||
+ | \} |
||
+ | </pre> |
||
</p> |
</p> |
||
</td> |
</td> |
||
Line 194: | Line 221: | ||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
− | <em><b>Example |
+ | <em><b>Example 2:</b> Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl</em> |
</p> |
</p> |
||
Line 349: | Line 376: | ||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
− | <em><b>Example |
+ | <em><b>Example 3:</b> Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl</em> |
</p> |
</p> |
||
Line 593: | Line 620: | ||
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
<p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
− | <em><b>Example |
+ | <em><b>Example 4:</b> (Not recommended) Using imageRow</em> |
</p> |
</p> |
||
Revision as of 23:40, 11 February 2010
Putting Graphs Into Tables
This PG code shows how to put graphs into tables so that they will be displayed compactly and a proper size in both HTML and TeX modes.
- Example 1: Creating an array of graphs with two columns (or three columns) that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl
- Example 2: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl
- Example 3: Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl
- Example 4: (Not recommended) Using imageRow
Example 1: Creating an array of graphs with two columns that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGchoicemacros.pl", "PGgraphmacros.pl", "unionTables.pl", "parserPopUp.pl", ); TEXT(beginproblem()); $refreshCachedImages=1; |
Initialization:
Be sure to load |
$f[0] = "-exp(x) for x in <-2.5,2.5> using color:red and weight:2"; $graph[0] = init_graph(-2.5,-10,2.5,1,'axes'=>[0,0]); $graph[0]->lb('reset'); $graph[0]->lb(new Label(2.25,0.25,'x','black','center','middle')); $graph[0]->lb(new Label(0.15,0.75,'y','black','center','middle')); $f[1] = "exp(-x) for x in <-2.5,2.5> using color:red and weight:2"; $graph[1] = init_graph(-2.5,-1,2.5,10,'axes'=>[0,0]); $graph[1]->lb('reset'); $graph[1]->lb(new Label(2.25,-0.25,'x','black','center','middle')); $graph[1]->lb(new Label(0.15,9.75,'y','black','center','middle')); $f[2] = "-exp(-x) for x in <-2.5,2.5> using color:red and weight:2"; $graph[2] = init_graph(-2.5,-10,2.5,1,'axes'=>[0,0]); $graph[2]->lb('reset'); $graph[2]->lb(new Label(2.25,0.25,'x','black','center','middle')); $graph[2]->lb(new Label(0.15,0.75,'y','black','center','middle')); $f[3] = "exp(x) for x in <-2.5,2.5> using color:red and weight:2"; $graph[3] = init_graph(-2.5,-1,2.5,10,'axes'=>[0,0]); $graph[3]->lb('reset'); $graph[3]->lb(new Label(2.25,-0.25,'x','black','center','middle')); $graph[3]->lb(new Label(0.15,9.75,'y','black','center','middle')); for $i (0..3) { plot_functions( $graph[$i], $f[$i]); $graph[$i]=image(insertGraph($graph[$i]), width=>200,height=>200,tex_size=>450); } @eqn =("\( y = -e^{x} \)", "\( y = e^{-x} \)", "\( y = -e^{-x} \)", "\( y = e^{x} \)"); $k = random(0,3,1); @perm = shuffle(4); @fig = @graph[@perm]; @inv = invert(@perm); @letter = ("A", "B", "C", "D"); $popup = PopUp(["?","A","B","C","D"], $letter[$inv[$k]]); |
Setup:
Generate graphs to be included in the main text. Notice our choice for the size of each graph is
Pick one equation and graph at random (using
If, instead, we had six graphs and desired a three-column array of graphs, we would want to change for $i (0..5) { plot_functions( $graph[$i], $f[$i]); $graph[$i]=image(insertGraph($graph[$i]), width=>200,height=>200,tex_size=>310); } |
BEGIN_TEXT Consider the exponential equation $eqn[$k]. Without using a calculator, sketch a graph of this equation on paper. $BR $BR Which graph A-D below most closely matches the graph you drew? \{ $popup->menu() \} $BR $BR $BCENTER \{ BeginTable(). AlignedRow([$fig[0],$fig[1]]). TableSpace(5,0). AlignedRow(["A","B"]). TableSpace(25,6). AlignedRow([$fig[2],$fig[3]]). TableSpace(5,0). AlignedRow(["C","D"]). EndTable(); \} $BR (Click on a graph to enlarge it.) $ECENTER END_TEXT |
Main Text:
Use commands such as If, instead, we had six graphs we wanted to display in three columns, we would use the following code. \{ BeginTable(). AlignedRow([$fig[0],$fig[1],$fig[2]]). TableSpace(5,0). AlignedRow(["A","B","C"]). TableSpace(25,6). AlignedRow([$fig[3],$fig[4],$fig[5]]). TableSpace(5,0). AlignedRow(["D","E","F"]). EndTable(). $BR.$BCENTER."(Click on a graph to enlarge it)".$ECENTER \} |
install_problem_grader(~~&std_problem_grader); $showPartialCorrectAnswers = 0; ANS( $popup->cmp() ); ENDDOCUMENT(); |
Answer Evaluation: To prevent students from guessing, use the standard problem grader and withhold feedback. |
Example 2: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGgraphmacros.pl", "MathObjects.pl", "unionTables.pl", # or "PGunion.pl", ); TEXT(beginproblem()); $refreshCachedImages=1; |
Initialization:
Be sure to load |
Context("Numeric"); $a = random(2,3,1); # -$a is the left x-intercept $b = random(2,4,2); # $b is the right x-intercept $c = random(1,4,1); # -$c is the y-intercept $k = $c/($a * $b); $A = $k; $B = $k*($a - $b); $C = -($c); $gr = init_graph(-5,-5,5,5,axes=>[0,0],grid=>[10,10]); add_functions($gr, "$A*x**2+$B*x+$C for x in <-5,5> using color:blue and weight:2"); $gr -> lb(new Label ( 4.5,0,'x','black','left','bottom')); $gr -> lb(new Label ( 0.25,8.5,'y','black','left','bottom')); $gr -> lb(new Label ( 0.25,$c,'y = f(x)','black','left','bottom')); |
Setup:
Generate a graph to be included in the main text. This graph is a parabola opening up with roots |
Context()->texStrings; BEGIN_TEXT \{ ColumnTable( "Use the graph to find the missing values. There may be more than one correct answer, in which case you should enter your answers as a comma separated list. If there are no correct answers, enter ${BITALIC}NONE.${EITALIC}". $BR. $BR. "(a) \( f(0) = \) ". ans_rule(7). $BR. $BR. "(b) \( f \big( \) ".ans_rule(7)." \( \big) = 0 \). ", # comma! image(insertGraph($gr), width=>400, height=>400, tex_size=>700). $BR.$BCENTER. "(Click on graph to enlarge)". $ECENTER, # comma! indent => 0, separation => 30, valign => "TOP" ) \} END_TEXT Context()->normalStrings; |
Main Text:
We use Using ColumnTable has two main advantages.
|
$showPartialCorrectAnswers = 1; ANS( List(-$c)->cmp() ); ANS( List(-$a,$b)->cmp() ); ENDDOCUMENT(); |
Answer Evaluation:
Since there may be multiple answers, we use |
Example 3: Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGchoicemacros.pl", "PGgraphmacros.pl", "unionTables.pl", ); TEXT(beginproblem()); $refreshCachedImages=1; |
Initialization:
Be sure to load |
#################################### # Create blank canvases with labels # foreach $j (0..5) { $graph[$j] = init_graph(-10,-10,10,10,'axes'=>[0,0], 'ticks'=>[10,10],'size'=>[400,400]); $graph[$j]->lb('reset'); foreach ($i = 1; $i <= 4; $i++) { $graph[$j]->lb(new Label(2*$i,-.1,2*$i,'black','center','top')); $graph[$j]->lb(new Label(-2*$i,-.1,-2*$i,'black','center','top')); $graph[$j]->lb(new Label(-.1,2*$i,2*$i,'black','right','middle')); $graph[$j]->lb(new Label(-.1,-2*$i,-2*$i,'black','right','middle')); } $graph[$j]->lb(new Label(9.8,-0.1,"x",'black','right','top')); $graph[$j]->lb(new Label(-.1,9.8,"y",'black','right','top')); } ######################################### # Manually add functions to the canvases # $f[0] = "\frac{-1}{x-5}-1"; plot_functions($graph[0], "-1/(x-5)-1 for x in <-10,4.99> using color:blue and weight:2", "-1/(x-5)-1 for x in <5.01,10> using color:blue and weight:2", ); # vertical asymptote $graph[0]->moveTo(5,-10); $graph[0]->lineTo(5,10,'black',1,'dashed'); # horizontal asymptote $graph[0]->moveTo(-10,-1); $graph[0]->lineTo(10,-1,'black',1,'dashed'); $f[1] = "\frac{x-2}{(x+1)(x-3)}"; plot_functions($graph[1], "(x-2)/((x+1)*(x-3)) for x in <-10,-1.01> using color:blue and weight:2", "(x-2)/((x+1)*(x-3)) for x in <-0.99,2.99> using color:blue and weight:2", "(x-2)/((x+1)*(x-3)) for x in <3.01,10> using color:blue and weight:2", ); # vertical asymptote $graph[1]->moveTo(-1,-10); $graph[1]->lineTo(-1,10,'black',1,'dashed'); # vertical asymptote $graph[1]->moveTo(3,-10); $graph[1]->lineTo(3,10,'black',1,'dashed'); $f[2] = "\frac{2x+4}{x-1}"; plot_functions($graph[2], "(2x+4)/(x-1) for x in <-10,0.99> using color:blue and weight:2", "(2x+4)/(x-1) for x in <1.01,10> using color:blue and weight:2", ); # vertical asymptote $graph[2]->moveTo(1,-10); $graph[2]->lineTo(1,10,'black',1,'dashed'); # horizontal asymptote $graph[2]->moveTo(-10,2); $graph[2]->lineTo(10,2,'black',1,'dashed'); $f[3] = "\frac{1}{x+1} + \frac{1}{x-3}"; plot_functions($graph[3], "1/(x+1)+1/(x-3) for x in <-10,-1.01> using color:blue and weight:2", "1/(x+1)+1/(x-3) for x in <-0.99,2.99> using color:blue and weight:2", "1/(x+1)+1/(x-3) for x in <3.01,10> using color:blue and weight:2", ); # vertical asymptote $graph[3]->moveTo(-1,-10); $graph[3]->lineTo(-1,10,'black',1,'dashed'); # vertical asymptote $graph[3]->moveTo(3,-10); $graph[3]->lineTo(3,10,'black',1,'dashed'); $f[4] = "\frac{1-x^2}{x-2}+3"; plot_functions($graph[4], "(1-x^2)/(x-2)+3 for x in <-10,1.99> using color:blue and weight:2", "(1-x^2)/(x-2)+3 for x in <2.01,10> using color:blue and weight:2", ); # vertical asymptote $graph[4]->moveTo(2,-10); $graph[4]->lineTo(2,10,'black',1,'dashed'); $f[5] = "\frac{1-4x}{2x+2}"; plot_functions($graph[5], "(1-4x)/(2x+2) for x in <-10,-1.01> using color:blue and weight:2", "(1-4x)/(2x+2) for x in <-0.99,10> using color:blue and weight:2", ); # vertical asymptote $graph[5]->moveTo(-1,-10); $graph[5]->lineTo(-1,10,'black',1,'dashed'); # horizontal asymptote $graph[5]->moveTo(-10,-2); $graph[5]->lineTo(10,-2,'black',1,'dashed'); ############################################### # Create figures that can be inserted directly # foreach $j (0..5) { $fig[$j] = image(insertGraph($graph[$j]), width => 200, height => 200, tex_size => 310); } ############################################### # Shuffle the figures # @perm = shuffle(6); @inv = invert(@perm); @fig = @fig[@perm]; @letter = ("A","B","C","D","E","F"); |
Setup: Generate a number of graphs to be included in the main text. Then, near the bottom, shuffle the graphs. |
BEGIN_TEXT \{ ColumnTable( "Without a calculator, match each function with its graph A-F ". "by finding the zeros, asymptotes, and end behavior for each function.". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[0] \)". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[1] \)". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[2] \)". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[3] \)". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[4] \)". $BR.$BR.pop_up_list(["?",@letter]).$SPACE."\( \displaystyle y = $f[5] \)",# comma! BeginTable(). AlignedRow([$fig[0],$fig[1],$fig[2]]). TableSpace(5,0). AlignedRow(["A","B","C"]). TableSpace(25,6). AlignedRow([$fig[3],$fig[4],$fig[5]]). TableSpace(5,0). AlignedRow(["D","E","F"]). EndTable(). $BR.$BCENTER."(Click on a graph to enlarge it)".$ECENTER, # comma! indent => 0, separation => 10, valign => "TOP" ) \} END_TEXT |
Main Text:
We use |
install_problem_grader(~~&std_problem_grader); $showPartialCorrectAnswers = 0; foreach $j (0..5) { ANS( str_cmp($letter[$inv[$j]]) ); } ENDDOCUMENT(); |
Answer Evaluation:
To keep students from guessing, we use the all-or-nothing grader |
Example 4: (Not recommended) Using imageRow
PG problem file | Explanation |
---|---|
BEGIN_TEXT \{ imageRow( ["graph1.png","graph2.png"], ["A","B"], width=>250, height=>250, tex_size=>450 ) \} \{ imageRow( ["g1.png","g2.png","g3.png"], ["A","B","C"], width=>200, height=>200, tex_size=>310 ) \} END_TEXT |
The |