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)</li> |
+ | <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 2: Creating an array of graphs with three columns that is below a text block (not side-by-side with text)</li> |
+ | <li>Example 2: Creating an array of graphs with three columns that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl</li> |
<li>Example 3: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl</li> |
<li>Example 3: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl</li> |
||
<li>Example 4: 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: Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl</li> |
||
Line 13: | Line 13: | ||
</ul> |
</ul> |
||
</p> |
</p> |
||
+ | |||
+ | |||
+ | |||
+ | <p style="background-color:#eeeeee;border:black solid 1px;padding:3px;"> |
||
+ | <em><b>Example 1:</b> 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</em> |
||
+ | </p> |
||
+ | |||
+ | <p style="text-align:center;"> |
||
+ | [[IndexOfProblemTechniques|Problem Techniques Index]] |
||
+ | </p> |
||
+ | |||
+ | <table cellspacing="0" cellpadding="2" border="0"> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <th> PG problem file </th> |
||
+ | <th> Explanation </th> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Load specialized macro files section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ddffdd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | DOCUMENT(); |
||
+ | |||
+ | loadMacros( |
||
+ | "PGstandard.pl", |
||
+ | "PGchoicemacros.pl", |
||
+ | "PGgraphmacros.pl", |
||
+ | "MathObjects.pl", |
||
+ | "unionTables.pl", |
||
+ | ); |
||
+ | |||
+ | TEXT(beginproblem()); # standard preamble to each problem. |
||
+ | |||
+ | $refreshCachedImages=1; |
||
+ | </pre> |
||
+ | </td> |
||
+ | <td style="background-color:#ccffcc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Initialization:</b> |
||
+ | Be sure to load <code>unionTables.pl</code> (or <code>PGunion.pl</code> which will load it automatically). Set <code>$refreshCachedImages=1;</code> if you desire the graphics files to be refreshed each time. |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Setup section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ffffdd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | $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; $i <= 3; $i++){ |
||
+ | 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,2,1); |
||
+ | |||
+ | @perm = NchooseK(4,4); |
||
+ | @mix_graph = @graph[@perm]; |
||
+ | @inv = invert(@perm); |
||
+ | |||
+ | @letter = ("A", "B", "C", "D"); |
||
+ | $correct = $letter[$inv[$k]]; |
||
+ | </pre> |
||
+ | </td> |
||
+ | <td style="background-color:#ffffcc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Setup:</b> |
||
+ | Generate a graph to be included in the main text. This graph is a parabola opening up with roots <code>-$a, $b</code> and y-intercept <code>-$c</code>. |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Question text section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#ffdddd;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | 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? |
||
+ | \{ pop_up_list(["?","A","B","C","D"]) \} |
||
+ | $BR |
||
+ | $BR |
||
+ | $BCENTER |
||
+ | \{ |
||
+ | BeginTable(). |
||
+ | AlignedRow([$mix_graph[0],$mix_graph[1]]). |
||
+ | TableSpace(5,0). |
||
+ | AlignedRow(["A","B"]). |
||
+ | TableSpace(25,6). |
||
+ | AlignedRow([$mix_graph[2],$mix_graph[3]]). |
||
+ | TableSpace(5,0). |
||
+ | AlignedRow(["C","D"]). |
||
+ | EndTable(); |
||
+ | \} |
||
+ | $BR |
||
+ | (Click on a graph to enlarge it.) |
||
+ | $ECENTER |
||
+ | END_TEXT |
||
+ | </pre> |
||
+ | <td style="background-color:#ffcccc;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Main Text:</b> |
||
+ | |||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | |||
+ | <!-- Answer section --> |
||
+ | |||
+ | <tr valign="top"> |
||
+ | <td style="background-color:#eeddff;border:black 1px dashed;"> |
||
+ | <pre> |
||
+ | $showPartialCorrectAnswers = 0; |
||
+ | |||
+ | ANS( str_cmp($correct) ); |
||
+ | |||
+ | ENDDOCUMENT(); |
||
+ | </pre> |
||
+ | <td style="background-color:#eeccff;padding:7px;"> |
||
+ | <p> |
||
+ | <b>Answer Evaluation:</b> |
||
+ | </p> |
||
+ | </td> |
||
+ | </tr> |
||
+ | </table> |
||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <p style="text-align:center;"> |
||
+ | [[IndexOfProblemTechniques|Problem Techniques Index]] |
||
+ | </p> |
||
+ | |||
+ | |||
+ | |||
Line 162: | Line 332: | ||
+ | |||
+ | |||
+ | <p style="text-align:center;"> |
||
+ | [[IndexOfProblemTechniques|Problem Techniques Index]] |
||
+ | </p> |
||
Line 170: | Line 345: | ||
</p> |
</p> |
||
− | <p style="text-align:center;"> |
||
+ | |||
− | [[IndexOfProblemTechniques|Problem Techniques Index]] |
||
− | </p> |
||
<table cellspacing="0" cellpadding="2" border="0"> |
<table cellspacing="0" cellpadding="2" border="0"> |
Revision as of 23:01, 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 that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl
- Example 2: Creating an array of graphs with three columns that is below a text block (not side-by-side with text) using BeginTable from unionTables.pl
- Example 3: Putting a long text block and a graph side-by-side using ColumnTable from unionTables.pl
- Example 4: Displaying a long, narrow text block and an array of graphs side-by-side using ColumnTable and BeginTable from unionTables.pl
- Example 5: (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", "MathObjects.pl", "unionTables.pl", ); TEXT(beginproblem()); # standard preamble to each problem. $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; $i <= 3; $i++){ 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,2,1); @perm = NchooseK(4,4); @mix_graph = @graph[@perm]; @inv = invert(@perm); @letter = ("A", "B", "C", "D"); $correct = $letter[$inv[$k]]; |
Setup:
Generate a graph to be included in the main text. This graph is a parabola opening up with roots |
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? \{ pop_up_list(["?","A","B","C","D"]) \} $BR $BR $BCENTER \{ BeginTable(). AlignedRow([$mix_graph[0],$mix_graph[1]]). TableSpace(5,0). AlignedRow(["A","B"]). TableSpace(25,6). AlignedRow([$mix_graph[2],$mix_graph[3]]). TableSpace(5,0). AlignedRow(["C","D"]). EndTable(); \} $BR (Click on a graph to enlarge it.) $ECENTER END_TEXT |
Main Text: |
$showPartialCorrectAnswers = 0; ANS( str_cmp($correct) ); ENDDOCUMENT(); |
Answer Evaluation: |
Example 3: 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 4: 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 5: (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 |