Many high level plotting functions (plot,
hist, boxplot, etc.) allow you to include
additional options to customise how the plot is drawn (as well as other
graphical parameters). We have seen examples of these already with the
axis label arguments xlab and ylab, however we
can customise the following plot features for finer control of how a
plot is drawn.
To control the ranges of the horizontal and vertical axes, we can add
the xlim and ylim arguments to our original
plotting command. To set the horixontal axis limits, we pass a vector of
two numbers to represent the lower and upper limits,
xlim = c(lower, upper), and repeat the same for
ylim to customise the vertical axis.
plot(x=mtcars$wt, y=mtcars$mpg, xlab="Weight", ylab="MPG",
main="MPG vs Weight", xlim=c(0,6), ylim=c(0,40))

Using colour in a plot can be very effective, for example to
highlight different groups within the data. Colour is adjusted by
setting the col optional arugment to the plotting function,
and what R does with that information depends on the value we
supply.
col is assigned a single value: all points on a
scatterplot, all bars of a histogram, all boxplots are coloured with the
new colourcol is a vector:
col is a vector of the same length
as the number of data points then each data point is coloured
individuallycol is a vector of the same length
as the number of bars then each bar is coloured individuallycol is a vector of the same length as
the number of boxplots then each boxplot is coloured individuallyNow that we know how the col argument works, we need to
know how to specify colours. Again, there are a number of ways and you
can mix and match as appropriate
1:8 are interpreted as
colours (black, red, green, blue, …) and can be used as a quick
shorthand for a common colour. Type palette() to see the
sequence of colours R uses."steelblue",
"darkorange". You can see the list of recognised names by
typing colors(), and a document showing the actual colors
is available here"#ff0000" and cyan as
"#00ffff".rainbow, heat.colors, and
terrain.colors and all take the number of desired colours
as argument.## 3 plots in one row
par(mfrow=c(1,3))
## colour the cars data by number of gears
plot(x=mtcars$wt, y=mtcars$mpg, col=mtcars$gear, xlab="Weight", ylab="MPG",
main="MPG vs Weight")
## manually colour boxplots
boxplot(mpg~cyl, data=mtcars, col=c("orange","violet","steelblue3"),
main="Car Milage Data", xlab="Number of Cylinders",
ylab="Miles Per Gallon")
## use a colour function to shade histogram bars
hist(mtcars$mpg,col=rainbow(5))

R Help: colors, palette, color functions
The symbols used for points in scatter plots can be changed by
specifying a value for the argument pch {#pch} (which
stands for plot character). Specifying
values for pch works in the same way as col,
though pch only accepts integers between 1 and 20 to
represent different point types. The default is pch=1 which
is a hollow circle. The possible values of pch are shown in
the plot below:

When drawing plots with lines instead of points, we can customise the
line style by specifying the line width and line type. Line width is
specified by lwd {#lwd} (for line
width) and is given a single numerical
value which is interpreted as the width of the line relative to the
default width of lwd=1. So, lwd=2 produces
lines that are twice as wide.
Line types are specified via the lty {#lty} argument as
integers corresponding to 6 different line styles shown in the plot
below:
plot(1:6,axes=FALSE,ty='n',ylim=c(0,7),xlab='',ylab='',main='Line types, lty=')
abline(h=1:6,lty=1:6,lwd=2,col='forestgreen')
axis(2,at=1:6)
box()

Once we have created a plot using the methods above, we often want to add additional information, such as points, lines, or a legend.
Additional points can be added to a plot using the
points function. It is used in the same way as
plot for drawing a scatterplot, but it can only add further
points to an existing plot.
For example, we can add the sample mean values as a red star to the plot of car weight vs miles-per-gallon
plot(x=mtcars$wt, y=mtcars$mpg, col=mtcars$gear, xlab="Weight", ylab="MPG",
main="MPG vs Weight")
points(x=mean(mtcars$wt), y=mean(mtcars$mpg), col='red', pch=8)

R Help: points
It is often useful to add simple straight lines to lines to plots,
which can be achieved using the abline function.
abline can be used in three different ways:
h argument,
abline(h=3) draws a horizontal line at \(y=3\)c argument,
abline(v=5) draws a vertical line at \(x=5\)a and b arguments representing the intercept
and slope respectively; abline(a=1,b=2) draws the line at
\(y=1+2x\)abline {#abline} can be customised using any of the
colour and line modifications discussed above.
plot(x=mtcars$wt, y=mtcars$mpg, col=mtcars$gear, xlab="Weight", ylab="MPG",
main="MPG vs Weight")
points(x=mean(mtcars$wt), y=mean(mtcars$mpg), col='red', pch=8)
abline(a=37.285, b=-5.344, col='red') ## line of best fit
abline(h=mean(mtcars$mpg), col='violet', lty=3) ## horizontal line through ybar

R Help: abline
We can also use R’s line drawing functions to add curves to
a plot via the lines {#lines} function, which works in
exactly the same way as point only drawing connected lines
rather than individual points. To add a function \(f(x)\) to a plot, we must first construct a
vector of \(x\) values over the range
of the plot, and then evaluate the function \(f\) at each of them. We can then supply
both vectors to lines as x and y
and it will connect the points and draw the function on the current
plot.
For example, suppose we generate 500 random values from a standard
normal distribution. We can plot their histogram via hist,
but we can also use dnorm to evaluate the standard normal
pdf and add it to the plot using the lines function:
randvals <- rnorm(500)
hist(randvals,freq=FALSE, ylim=c(0,0.45)) ## freq=FALSE to plot the density
xs <- seq(-5,5,length=500) ## make a sequence of x values
ys <- dnorm(xs) ## evaluate the N(0,1) pdf at each x value
lines(y=ys,x=xs,col='red') ## plot the values as connected lines

R Help: lines
In the same way as points and lines can be added to a plot, text
annotations can be drawn on plots using the text function.
Again, we must specify the x and y location(s)
but now we must also supply the text to be drawn at each point via the
labels argument. Text size can be adjusted by the
cex argument, and the position of the text relative to the
point specified can be adjusted by the pos argument.
plot(x=mtcars$wt, y=mtcars$mpg, main="Milage vs. Car Weight",
xlab="Weight", ylab="Mileage", pch=18, col="blue")
text(x=mtcars$wt, y=mtcars$mpg, labels=row.names(mtcars), cex=0.6, pos=4, col="red")

R Help: text
The legend function adds legends to plots
legend(location, legend, ...)
The required arguments are:
location: There are several ways to indicate the
location of the legend. You can give an x,y coordinate for
the upper left hand corner of the legend. Often, it is easier to use one
of the keywords "bottom", "bottomleft",
"left", "topleft", "top",
"topright", "right",
"bottomright", or "center".legend: A character vector with the labels for each
item in the legend.The legend function takes a number of optional
arguments:
...: Other optional arguments to display in the legend
to match each of the labels. If the legend labels colored lines, specify
col= and a vector of colors. If the legend labels point
symbols, specify pch= and a vector of point symbols. If the
legend labels line width or line style, use lwd= or
lty= and a vector of widths or styles. To create colored
boxes for the legend, use fill= and a vector of
colors.title: a title for the legend box.horizontal: display the legend items horizontally
rather than verticallyboxplot(mtcars$mpg~mtcars$cyl, main="Milage by Car Weight",
yaxt="n", xlab="Milage", horizontal=TRUE, col=terrain.colors(3))
legend("topright", title="Number of Cylinders", legend=c("4","6","8"), fill=terrain.colors(3), horiz=TRUE)

R Help: legend