Difference between revisions of "GraphsInTables"
Line 43: | Line 43: | ||
"PGgraphmacros.pl", |
"PGgraphmacros.pl", |
||
"unionTables.pl", |
"unionTables.pl", |
||
+ | "parserPopUp.pl", |
||
); |
); |
||
Line 103: | Line 104: | ||
@letter = ("A", "B", "C", "D"); |
@letter = ("A", "B", "C", "D"); |
||
+ | |||
+ | $popup = PopUp(["?","A","B","C","D"], $letter[$inv[$k]]); |
||
</pre> |
</pre> |
||
</td> |
</td> |
||
Line 129: | Line 132: | ||
Which graph A-D below most closely matches |
Which graph A-D below most closely matches |
||
the graph you drew? |
the graph you drew? |
||
− | \{ pop_up_list(["?",@letter]) \} |
||
+ | \{ $popup->menu() \} |
||
$BR |
$BR |
||
$BR |
$BR |
||
Line 165: | Line 168: | ||
$showPartialCorrectAnswers = 0; |
$showPartialCorrectAnswers = 0; |
||
− | ANS( |
+ | ANS( $popup->cmp() ); |
ENDDOCUMENT(); |
ENDDOCUMENT(); |
||
Line 172: | Line 175: | ||
<p> |
<p> |
||
<b>Answer Evaluation:</b> |
<b>Answer Evaluation:</b> |
||
+ | To prevent students from guessing, use the standard problem grader and withhold feedback. |
||
</p> |
</p> |
||
</td> |
</td> |
Revision as of 23:28, 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", "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; $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,3,1); @perm = shuffle(4); @mix_graph = @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 |
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([$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:
Use commands such as |
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 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 |