# DynamicImages2

 This article has been retained as a historical document. It is not up-to-date and the formatting may be lacking. Use the information herein with caution.

This problem has been replaced with a newer version of this problem

## Adding Labels, Lines and Points to Dynamic Graphs: PG Code Snippet

This code snippet shows the essential PG code to add labels, lines and points to dynamically generated graphs. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.

PG problem file Explanation
```  loadMacros("PGgraphmacros.pl");
```

We have no required additions to the tagging and description section of the file, and we obviously need to include `PGgraphmacros.pl` to do dynamic graphs.

```# a graph object
\$gr = init_graph(-1,-1,4,4,
axes=>[0,0],
size=>[400,400]); # or pixels=>[400,400]

# specify the grid manually
\$gr->h_grid("gray",1.5,3);
\$gr->v_grid("gray",1,2,3);

# or specify tickmarks
# x-axis ticks entered as y-value, color, list of x-values
# \$gr->h_ticks(0,"black",1,2,3);
# y-axis ticks entered as x-value, color, list of y-values
# \$gr->v_ticks(0,"black",1.5,3);

# plot a function
add_functions(\$gr, "4-3*e^(-x) for x in <-1,4> " .
"using color:blue and weight:2");

\$gr->lb( new Label(0.25,3.25,'(0,3)',
'black','center','middle'));

# a line
\$gr->moveTo(-1,1);
\$gr->lineTo(4,1,'black');

# a thicker, blue line
#    (only works for WeBWorK > 2.4)
\$gr->lineTo(4,-1,'blue',2);

# a dashed blue line
#    (only works for WeBWorK > 2.4)
\$gr->lineTo(4,-1,'blue',1,'dashed');

# a thicker red arrow from (0,0) to (4,1)
#    (only works for WeBWorK > 2.4;
#    also supports the 'dashed' option)
\$gr->moveTo(0,0);
\$gr->arrowTo(4,1,'red',2);

# and a point
\$gr->stamps( closed_circle(0,3,'blue') );

```

In the initialization part of the file, we define a dynamically generated graph. Then we can add labels, lines and points to the graph.

To add labels, we use the `lb` method of the graph object. The argument is a new `Label` object, defined by an x-coordinate, y-coordinate, label text, color, and justification. The justification can be left, center or right for the left-to-right justification, and top, middle or bottom for the top-to-bottom justification.

Lines are added by moving the graph "cursor" to a point and then drawing a line to a new point. Note that the "cursor" remains at the endpoint of the line after drawing is completed, so that any line drawn thereafter without an additional `moveTo` method call will start at that endpoint.

And we add points by using the `stamps` method of the graph object. We've added a closed circle here (`open_circle` is also supported).

For alignment of labels, we have

• `'left', 'center', 'right'` for horizontal alignment
• `'bottom', 'middle', 'top'` for vertical alignment

For example, specifying `'left','bottom'` will put the bottom left corner of the text at the specified point.

```BEGIN_TEXT
\$BCENTER
\{ image( insertGraph(\$gr), width=>400,
height=>400, tex_size=>800 ) \}
\$ECENTER
END_TEXT
```

And the graph is inserted in the text portion of the problem as we'd expect any static or dynamic image to be. (Note that if we insert a graph with a smaller size than the size specified in `init_graph` we may want to include a note indicating that clicking on the graph will display a larger version.)