3 Plot data
For convenience, we first define a plot theme:
3.1 Define plot theme
<- min(blanks$blank)
min.absorb <- max(standard$absorbance)
max.absorb <- 11
font.size # Define theme for plotting
#' @param title.hjust horizontal alignment of plot title
#' @param legend_pos legend position
#' @return theme for ggplot
<- function(
theme_plot title.hjust = 0, legend.pos = "right", legend.dir = "vertical") {
theme(
axis.text = element_text(
size = font.size,
face = "bold"
),axis.title.x = element_text(
size = font.size,
hjust = 1
),axis.title.y = element_text(
size = font.size,
hjust = 0.9
),plot.title = element_text(
size = font.size + 2,
face = "bold",
hjust = title.hjust
),plot.margin = rep(grid::unit(1, "cm"), 4),
axis.line = element_blank(),
legend.position = legend.pos,
legend.direction = legend.dir,
legend.text = element_text(size = font.size),
legend.title = element_text(size = font.size)
+
) background_grid(
major = "yx",
minor = "",
colour.major = "grey90",
size.major = 0.2
) }
3.2 Plot standard
Now let’s plot the standard:
<- function(semilog = FALSE) {
plot.std <- ggplot(data = standard) +
p scale_color_brewer(
palette = "Set1",
labels = paste("Replicate", seq(n.repl.std)),
guide = guide_legend(title = "")
+
) scale_y_continuous(
limits = c(min.absorb, max.absorb + 0.1 * max.absorb)
+
) geom_hline(
yintercept = mean(blanks$blank),
lty = 2,
color = "grey60",
lwd = 0.2
+
) theme_plot()
if (semilog == TRUE) {
<- p + geom_point(aes(concentration, absorbance, color = replicate), alpha = 0.6) +
p labs(
x = "Relative concentration",
y = "Absorbance (a. u.)",
title = "IgG in standard serum"
+
) scale_x_continuous(breaks = concentrations, labels = scales::percent, trans = "log2") +
annotate("text",
label = "Blank",
x = max(standard$concentration) - 0.05 * max(standard$concentration),
y = max(blanks$blank) + 20 * max(blanks$blank),
size = 3.5,
color = "grey50"
)
}else {
<- p + geom_point(
p aes(concentration, absorbance, color = replicate),
alpha = 0.6
+
) labs(
x = "Relative concentration",
y = "Absorbance (a.u.)",
title = "IgG in standard serum"
+
) scale_x_continuous(breaks = round(concentrations,1),
labels = scales::percent) +
annotate("text",
label = "Blank",
x = max(standard$concentration) - 0.05 * max(standard$concentration),
y = max(blanks$blank) + 0.2 * max(blanks$blank),
size = 3.5,
color = "grey50"
)
}
p
}plot.std()
We see that the concentration of the dilution series is on a logarithmic scale. Let’s replot the results with \(\log_2\)-transformed concentrations (\(\log_2\) for a dilution factor of 2):
plot.std(semilog = TRUE)
3.3 Plot biological samples
Now let’s have a look at our actual data. We measured IgG in serum of four donors on five different time points. We first define a plot for our biological samples and then plot it together with the standard curve to have a better overview.
# Select biological samples
<- c("AB1981", "CD1982", "EF1983", "GH1984")
ID.selected <- donors.av %>% dplyr::mutate(ID = rep(ID.selected, each = 5))
donors.av donors.av
## # A tibble: 20 x 4
## donor time absorbance.av ID
## <fct> <int> <dbl> <chr>
## 1 1 0 0.336 AB1981
## 2 1 7 0.596 AB1981
## 3 1 30 0.710 AB1981
## 4 1 60 0.804 AB1981
## 5 1 180 0.482 AB1981
## 6 2 0 0.534 CD1982
## 7 2 7 0.729 CD1982
## 8 2 30 0.825 CD1982
## 9 2 60 0.790 CD1982
## 10 2 180 0.660 CD1982
## 11 3 0 0.347 EF1983
## 12 3 7 1.25 EF1983
## 13 3 30 0.837 EF1983
## 14 3 60 0.768 EF1983
## 15 3 180 0.563 EF1983
## 16 4 0 0.932 GH1984
## 17 4 7 1.17 GH1984
## 18 4 30 1.01 GH1984
## 19 4 60 0.845 GH1984
## 20 4 180 0.950 GH1984
<- ggplot() +
plot.donors geom_point(data = donors.av,
aes(time, absorbance.av, color = donor), alpha = 0.7) +
geom_line(data = donors.av,
aes(time, absorbance.av, group = donor, color = donor), alpha = 0.6, lwd = 0.5) +
labs(
x = "Days after vaccination", y = "Absorbance (a. u.)",
title = "[Illustrative example] IgG in serum after vaccination"
+
) scale_color_viridis(
begin = 0.2, end = 0.8, discrete = TRUE,
labels = paste("Donor", seq(n.donors)), guide = guide_legend(title = "")
+
) scale_y_continuous(limits = c(min.absorb, max.absorb + 0.1 * max.absorb)) +
scale_x_continuous(breaks = tpoints) +
geom_hline(
yintercept = mean(blanks$blank),
lty = 2, color = "grey60", lwd = 0.2
+
) annotate("text",
label = "Blank",
x = max(donors$time) - 0.1 * max(donors$time),
y = max(blanks$blank) + 20 * max(blanks$blank),
size = 3.5, color = "grey50"
+
) background_grid(
major = "yx", minor = "", colour.major = "grey90", size.major = 0.2
+
) theme_plot()