Dr Dean Hammond has written this script that illustrates how to use a for loop to plot data from six separate enzyme kinetic experiments to allow a comparison. It builds on the previous example of plotting enzymatic data.
The data is all contained in a matrix, a type of two dimensional data structure where all the data is of the same type.
Here is the output that is produced:
Here is the script that makes it:
# Following on from Prof. Beynon's example with enzymatic data...
# For multiplotting 6 enzymology data-sets, using base R
# Data from six experiments
no.Exp <- c("Exp 1","Exp 2", "Exp 3", "Exp 4","Exp 5", "Exp 6")
# Substrate concentrations:
Sub <- c(0, 1, 2, 4, 8, 12, 16, 20, 30, 40)
# Data in a matrix - 2D object with data of the same class (numeric)
enzdata <- matrix(c(0, 17.36667, 31.97143, 52.68889, 61.95385, 74.2, 77.97143, 84.28, 99.91429, 93.66667,
0, 15.7, 29.42286, 45.64, 62.60615, 75.78118, 69.88, 75.256, 89.59429, 86.84,
0, 27.10667, 42.12, 63.48, 69.56, 74.26857, 79.44444, 83.29091, 87.1, 82.08571,
0, 24.72, 39.07, 47.4, 57.928, 67.6, 71.35556, 67, 75.79375, 70.86667,
0, 5.723636, 11.48, 17.697143, 28.813333, 37.567273, 42.483077, 40.68, 52.81, 56.92,
0, 2.190476, 5.254545, 8.95, 15.628571, 20.8, 25.355556, 26.55, 32.44, 33.333333),
nrow=10,
ncol=6)
# specify plotting parameters for our multiplot page:
par(mfrow = c(3, 2), # 6 plots in a 2 column x 3 row format
oma = c(1,1,1,1), # oma = outer margin in lines, of each plots (bottom, left, top, right)
mar = c(3,3,2,1), # mar = no. of lines to be specified on the four sides of each plot
cex.main = 0.9, # main text size
las = 1) # all axis labels horizontal
# here's a for loop
# to plot the data for each enzymatic reaction (Expt),
# get the values of Km and Vmax from the theoretical formula.
# Then, build a theoretical line defining the best fit curve.
for(i in 1:length(no.Exp)){ # for every experiment - one col
v <- enzdata[, i] # get the velocity ('v') data
data <- cbind(Sub, v) # create a data-set for each expt
fit <- nls(v ~ Vmax * (Sub / (Km + Sub)),
start = list(Vmax = 50, Km = 2))
# write a title for each peptide plot, based on colnames:
title = paste(no.Exp[i]) # use exp name as a plot title
SconcRange <- seq(0, 50, 0.1)
theorLine <- predict(fit, list(Sub = SconcRange))
# draw each plot, with points,
#applying the correct title adjusting font sizes accordingly:
plot(Sub, v, main = title,
col = 'red', pch = 16,
cex.lab = 0.6, cex.axis = 0.8,
xlab = NA, ylab = NA) # omit drawing axis labels
# add the theoretical lines:
lines(SconcRange, theorLine, lwd = 1.5, col = 'blue')
} # this curly bracket is the end of the for loop.
# use mtext to add single x- and y-axis labels for all plots, close to the margin:
mtext("Velocity (nmol/s)", side = 2, las = 0, outer = TRUE, line = -1)
mtext("Substrate (mM)", side = 1, outer = TRUE, line = -0.5)