**1. Plotting Devices
2. Graph Functions
3. Parameter Settings
4. Exporting Graphs**

## Plotting Devices:

If you are working on a windows platform then when you use a function which
creates a graph a graphics window will automatically be launched. Common device functions include: **dev.off**, **dev.set**, **graphics.off**. These functions
are especially useful if there is more than one graphics window open. Only one device can
be active and it is in the active device that all the graphics operations occur. The function
**dev.set** is used to specify which device is going to be active. The output from the **dev.set**
function is to list the number of the active device.
The **dev.off** function is used to close a specific device. The default of **dev.off** is to
close the current device. The function **graphics.off** will close all the devices at once.

### Graph functions

Common functions to create plots: **plot**, **boxplot**, **barplot**, **stars**, **pairs**,
**matplot**, **hist**, **image**, **contour**.

In order to see the specifics for each function please consult the help pages. The **plot** function is the most basic plotting function.
Using the **plot** function with only one variable will result in an index plot. Using two variables in the **plot** function will result in a
graph with the first argument as the variable plotted on the x-axis and the second
argument as the variable plotted on the y-axis. In the following example we create two variables, **var1** and **var2, **
and graph them using the **plot** and **hist** functions.

var1 <- rnorm(100) plot(var1)

var2 <- var1 + 2*rnorm(100) plot(var1, var2)

hist(var1)

Common functions that will add features to an existing plot: **points**, **lines**, **text**,
**mtext**, **image**, **contour**, **title**, **legend**. This
is not the exhaustive list of all the functions that will add to a plot
since this list would be too long to include here. Furthermore, to understand the specific
features of each function please consult the help pages. Note that **image** and **contour**
can be used to add to an existing plot by using the option **add** and setting it to TRUE.
In the following example we graph two variables using the **points** function and we
identify the two variables using the **legend** function. The **pch** option in the
**points** function changes the symbols used in the plot. Basic marks are
device-dependent, but generally adhere to the following standards: square (0);
circle (or octagon) (1); triangle (2); cross (3); X (4); diamond (5) and
inverted triangle (6). To get superimposed versions of the above use the
following arithmetic(!): 7=0+4; 8=3+4; 9=3+5; 10=1+3; 11=2+6; 12=0+3; 13=1+4;
14=0+2. Filled marks are square (15), octagon (16), triangle (17), and diamond
(18). Using the numbers 32 through 126 for **pch**
yields the 95 ASCII characters from space through tilde (see the S-PLUS data set
font). The numbers between 161 and 252 yield characters,
accents, ligatures, or nothing, depending on the font (which is device
dependent). In the **legend** function the first
argument is the x-coordinate of the upper right hand corner of the legend box, the
second argument is the y-coordinate, the third argument is the list of the text
to be displayed and the **marks** option specifies which symbols will be displayed.

plot(var1, var2) var3 <- var2 + 2*rnorm(100) points(var1, var3, pch=18) legend(-2, 6, c("var2", "var3"), marks= c(1, 18) )

The next example uses the **plot**, **text** and **title** functions. The
**text** function allows you to label points in the graph. The default option
is to display the observation number for each point. The option **ylim**
determines the limits of the y-axis.

plot(var1, var2, ylim = c(-8, 8)) text(var1, var3) title( "var2 and var3")

The next graph will illustrate the use of the function **lines** to add lines to an existing graph.
The **type** option in the **plot** function is used to specify which type of graph to be plotted including points (“p”),
lines (“l”), vertical height bars (“h”), and step-functions (“s”). The **xlab** and
**ylab** options in the **plot** function change the labels on the x and y-axes respectively. The lines types used in the
graph can be changed by using the **lty** option. The **title **function will place the first argument as a title
above the graph and the second argument as a title below the graph.

x <- seq( -10, 10, length = 1000) plot(x, sin(x), xlab="x-values", ylab="f(x)", type="l") lines(x, cos(x), lty=3) title( "Trigonometric functions", "sin(x) and cos(x)")

The following example illustrates how you can build a graph in R. We start by using the **plot** function
but this time we use the **axes** option to indicate that we do not want to utilize the default axes.
We use the **pch** option to change the symbols used in the graph.
We want to show both the symbols at each point plotted and draw a line connecting the points, so we use the **type** option to
plot both lines and symbols.

x <- seq( 0, 2*pi, length = 15) y <- sin(x) plot(x, y, axes=F, type="b", pch="*", xlab=" ", ylab=" ")

Now we would like to add axes to the graph and we do this using the **axis** function.

axis ( 1, at = c(0, 1, 2, pi, 4, 5, 2*pi), labels = c(0, 1, 2, "pi", 4, 5, "2 pi"), pos=0) axis (2, at = c( -1, -0.5, 0, 0.25, 0.5, 0.75, 1) )

Finally, we want to add the reference lines and the text at the coordinates (pi, 0). The
**abline** function
adds lines to the graph and when using the **h** options we indicate that we want the lines to be horizontal reference
lines and thus we only need to specify the y-intercept for each line. The **adj** option in the text function
determines how the text is adjusted (0=left justified, .5=centered, and 1=right justified).

abline( h= c(-1, -0.5, 0.5, 1), lty=2) text( pi, 0.1, "sin(pi) = 0", adj=0)

## Parameter Settings:

It is possible to set the parameters of the graphs globally by using the **par** function. However, if
the graphs being produced vary from graph to graph then it is probably more useful to set the parameters
within each plotting function. The most commonly used parameter settings
include **mfrow** (multiple figures by row) and **mfcol** (multiple
figures by column) which determine the layout of multiple graphs in one graphing
device. By specifying **mfrow** = c(n,m) the results will be an n*m
matrix of graphs that are filled by rows, using the **mfcol** option would
generate the same graphics layout but it would be filled by columns rather than
by rows. The placement of the graph within the graphics device is determine by
**fig**=c(x1,x2,y1,y2) where x1-y2 are the coordinates of the current figure region expressed as a fraction of
the device surface. This is dependent on **mfrow** and **mfcol**.
Margins size in inches are determined by **mai**=c(xbot,xlef,xtop,xrig).
The first example illustrates the use of the option **mfcol** and the second
example illustrates the use of the **fig** option for including multiple
plots in one frame. In the second example the function frame clears any graphs from
the current device.

par( mfcol= c(1, 2)) hist(var1) title( "Histogram of var1") boxplot(var1) title("Boxplot of var1")

frame() par( fig = c( 0, .7, 0 , .7) ) plot(var1) title( "Var1")

par( fig = c(0, .7, .7, 1) ) hist(var1) title( "Var1")

par( fig = c(.7, 1, 0, .7)) boxplot(var1) title( "Var1")

par( fig = c(.7, 1, .7, 1) ) barplot(var1) title( "Var1")

## Exporting Graphs:

It is possibly to save graphs created in SPLUS in many different formats using the export.graph function. These formats including the ever popular postscript (ps), portable networks graphics (png), windows bitmap (bmp), gif and jpeg. The following is an example of exporting a histogram as a png format that is 5 inches high and 6 inches wide and then as a jpeg which is 10 cm high and 12 centimeters wide. Note that Name is a required argument which indicates from which device you are obtaining the graph. In this example we are using the default device which is GSD2. Furthermore, the argument Name must be capitalized whereas the other arguments can be either upper or lower case.

hist(var1) export.graph("C:temphttps://stats.idre.ucla.edu/wp-content/uploads/2016/02/hist1.png", Name="GSD2", exporttype = "PNG", height=5, width=6)

hist(var2) export.graph("C:temphttps://stats.idre.ucla.edu/wp-content/uploads/2016/02/hist2.jpg", Name="GSD2", exporttype = "JPG", height=13, width=15, units="cm")

The postscript file can also be generated using the **postscript **function.
The following example show how to save a histogram of var1 as a postscript file using the
postscript function.

postscript("hist.ps") hist(var1) dev.off()

These graphs can be created by using the export graph menu located under the File menu. The following example shows how to save an SPLUS graph as a portable network graphics file using the export menu. The export graph menu will only be available if the currently active device is the graph device.

FILE EXPORT GRAPHSelect the file type (in this case Portable Network Graphics (PNG)) and browse to the folder where the file will be saved to.