Raymond Raymond | R Programming

Plotting with R (Part I)

event 2020-09-23 visibility 428 comment 0 insights toc
insights Stats
Plotting with R (Part I)

For data analyst, it is critical to use charts to tell data stories clearly. R has numerous libraries to create charts and graphs. This article summarizes the high-level R plotting APIs (incl. graphical parameters) and provides examples about plotting Pie Chart, Bar Chart, BoxPlot, Histogram, Line and Scatterplot using R.

Device, screen and layout

Before plotting, it is important to understand R's

Graphical devices
These APIs provide controls over multiple graphics devices:
dev.list(), dev.cur(), dev.set(number), dev.off()

These APIs can be used to define a number of regions within the current device which can, to some extent, be treated as separate graphics devices. It is useful for generating multiple plots on a single device. 
split.screen, screen(n), erase.screen()

* cannot work with multiple graphic device

Layouts (not compatible with split.screen)
layout divides the device up into as many rows and columns as there are in matrix mat, with the column-widths and the row-heights specified in the respective arguments.
layout(matrix), layout.show(n)


The following are some code examples (script R26.GraphicDevices.R) using these APIs:

# list devices


# split screen
split.screen(c(1, 2))

# layout
layout(matrix(1:4, 2, 2))
For example, the following code snippet will split the screen into 4 regions:
layout(matrix(1:4,2,2), widths=c(1, 3),heights=c(3, 1)) 


Graphic functions

The following table summarizes R graphic functions that can be used in plotting: 

Function Description
plot(x) lot of the values of x (on the y-axis) ordered on the x-axis 
plot(x, y)  bivariate plot of x (on the x-axis) and y (on the y-axis)
sunflowerplot(x, y) the points with similar coordinates are drawn as a flower which petal number represents the number of points 
pie(x) circular pie-chart
boxplot(x) “box-and-whiskers” plot
stripchart(x) plot of the values of x on a line (an alternative to boxplot() for small sample sizes)
coplot(x~y | z) bivariate plot of x and y for each value (or interval of values) of z 
interaction.plot (f1, f2, y)  (f1, f2, y)
if f1 and f2 are factors, plots the means of y (on the y-axis) with respect to the values of f1 (on the x-axis) and of f2 (different curves); the option fun allows to choose the summary statistic of y (by default fun=mean) 
matplot(x,y)  bivariate plot of the first column of x vs. the first one of y, the second one of x vs. the second one of y, etc. 
dotchart(x) if x is a data frame, plots a Cleveland dot plot (stacked plots line-by-line and column-by-column) 
fourfoldplot(x) visualizes, with quarters of circles, the association between two dichotomous variables for different populations (x must be an array with dim=c(2, 2, k), or a matrix with dim=c(2, 2) if k = 1) 
assocplot(x) Cohen–Friendly graph showing the deviations from independence of rows and columns in a two dimensional contingency table 
mosaicplot(x) ‘mosaic’ graph of the residuals from a log-linear regression of a contingency table 
pairs(x)  if x is a matrix or a data frame, draws all possible bivariate plots between the columns of x 
plot.ts(x) if x is an object of class "ts", plot of x with respect to time, x may be multivariate but the series must have the same frequency and dates 
ts.plot(x) Similar as above but if x is multivariate the series may have different dates and must have the same frequency 
hist(x) histogram of the frequencies of x
barplot(x) histogram of the values of x 
qqnorm(x) quantiles of x with respect to the values expected under a normal law 
qqplot(x, y)  quantiles of y with respect to the quantiles of x 
contour(x, y, z)  contour plot (data are interpolated to draw the curves), x and y must be vectors and z must be a matrix so that dim(z)=c(length(x), length(y)) (x and y may be omitted) 
filled.contour (x, y, z) Similar as above but the areas between the contours are coloured, and a legend of the colours is drawn as well
image(x, y, z)  Similar as above but the actual data are represented with colours
persp(x, y, z)  Similar as above but in perspective 
stars(x) if x is a matrix or a data frame, draws a graph with segments or a star where each row of x is represented by a star and the columns are the lengths of the segments
symbols(x, y, ...)  draws, at the coordinates given by x and y, symbols (circles, squares, rectangles, stars, thermometers or “boxplots”) which sizes, colours, etc, are specified by supplementary arguments
termplot(mod.obj) plot of the (partial) effects of a regression model (mod.obj)

Commonalities of graphic functions 

There are some common shared parameters for these plotting functions:

  • add=FALSE: if TRUE superposes the plot on the previous one (if it exists) 
  • axes=TRUE: if FALSE does not draw the axes and the box
  • type="p":

"p": points

"l": lines

"b": points connected by lines

"o": Similar as above but the lines are over the points

"h": vertical lines

"s": steps, the data are represented by the top of the vertical lines

"S": Similar as above but the data are represented by the bottom of the vertical lines 

  • xlim=, ylim= specifies the lower and upper limits of the axes, for example with xlim=c(1, 10) or xlim=range(x) 
  • xlab=, ylab= annotates the axes (character vector)
  • main= main title (character vector)
  • sub= sub-title

Simple examples

The following code snippet shows some basic examples (script R27.GraphicalFunctions.R) using these common parameters:

# plot
x <- rnorm(30,20,10)

plot(x, type="p", main="Plot with Type p", )
plot(x, type="l", main="Plot with Type l", add=FALSE)
plot(x, type="b", main="Plot with Type b", add=FALSE)
plot(x, type="o", main="Plot with Type o", add=FALSE)
plot(x, type="h", main="Plot with Type h", add=FALSE)
plot(x, type="s", main="Plot with Type s", add=FALSE)
plot(x, type="S", main="Plot with Type S", add=FALSE)







Low level plotting commands

Low level plotting commands are used to affect an existing graph. They can be used to add these items to the graph:

  • data labels
  • lines and points
  • legends
  • title, sub title
  • … 

The following table summarizes all the low-level plotting commands:

Commands Description
points(x, y) adds points (the option type= can be used)
lines(x, y) Similar as above but with lines 
text(x, y, labels, ...) adds text given by labels at coordinates (x,y); a typical use is: plot(x, y, type="n"); text(x, y, names)
mtext(text, side=3, line=0, ...) adds text given by text in the margin specified by side (see axis() below); line specifies the line from the plotting area
segments(x0, y0, x1, y1) draws lines from points (x0,y0) to points (x1,y1)
arrows(x0, y0, x1, y1, angle= 30, code=2) Same as above with arrows at points (x0,y0) if code=2, at points (x1,y1) if code=1, or both if code=3; angle controls the angle from the shaft of the arrow to the edge of the arrow head 
abline(a,b) draws a line of slope b and intercept a 
abline(h=y) draws a horizontal line at ordinate y
abline(v=x)  draws a vertical line at abcissa x
abline(lm.obj)  draws the regression line given by lm.obj
rect(x1, y1, x2, y2) draws a rectangle which left, right, bottom, and top limits are x1, x2, y1, and y2, respectively 
polygon(x, y)  draws a polygon linking the points with coordinates given by x and y 
legend(x, y, legend) adds the legend at the point (x,y) with the symbols given by legend 
title() adds a title and optionally a sub-title
axis(side, vect)  adds an axis at the bottom (side=1), on the left (2), at the top (3), or on the right (4); vect (optional) gives the abcissa (or ordinates) where tick-marks are drawn 
box()  adds a box around the current plot
rug(x)  draws the data x on the x-axis as small vertical lines 

Graphic parameters

Graphs can be improved using graphical parameters. They can be used either as options of graphical functions or with function par

For example, the following code snippet will set the device background color as green for all the following plots:


In next part, I will show plotting examples of different chart types. 

More from Kontext
comment Comments
No comments yet.

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts