From f5a24e1174c5dae6795406546b1814308c899388 Mon Sep 17 00:00:00 2001 From: Joachim Goedhart Date: Tue, 25 Oct 2022 16:39:08 +0200 Subject: [PATCH] Improved structure -added directory for data -updated the overview of protocols --- .DS_Store | Bin 10244 -> 10244 bytes .Rproj.user/shared/notebooks/paths | 29 +++++++++++++++- 04-complete-protocols.Rmd | 2 +- Plotting all shapes.R | 24 +++++++++++++ Plotting_all_point_shapes.R | 21 ++++++++++++ .../20220421_Resultaat-metingen.csv | 0 Protocols/{ => data}/DRC_Histamine.csv | 0 .../{ => data}/Data_Arts_Circularity.xlsx | Bin .../{ => data}/DualLuc_example_data.xlsx | Bin Protocols/{ => data}/ERK_repsonse_to_S1P.csv | 0 Protocols/{ => data}/FPbase_Spectra_4FPs.csv | 0 Protocols/{ => data}/Rac_S1P.csv | 0 Protocols/{ => data}/Tidy_design.csv | 0 Protocols/{ => data}/df_tidy_wells.csv | 0 Protocols/{ => data}/figure5.xlsx | Bin Protocols/protocol_1.Rmd | 2 +- Protocols/protocol_10.Rmd | 2 +- Protocols/protocol_11.Rmd | 2 +- Protocols/protocol_2.Rmd | 2 +- Protocols/protocol_3.Rmd | 2 +- Protocols/protocol_4.Rmd | 4 +-- Protocols/protocol_6.Rmd | 2 +- Protocols/protocol_7.Rmd | 2 +- Protocols/protocol_8.Rmd | 3 +- Protocols/protocol_9.Rmd | 6 ++-- .../figure-html/unnamed-chunk-83-1.png | Bin 59711 -> 59213 bytes docs/404.html | 2 +- .../figure-html/unnamed-chunk-83-1.png | Bin 59711 -> 59213 bytes docs/Protocols/overview_of_protocols.png | Bin 2112484 -> 2179415 bytes docs/complete-protocols.html | 32 +++++++++--------- docs/getting-started.html | 2 +- docs/index.html | 8 +++-- docs/plotting-the-data.html | 2 +- docs/questions-and-answers.html | 2 +- docs/read-and-reshape.html | 2 +- docs/search_index.json | 2 +- ggplot2-geom_point-shapes.R | 23 +++++++++++++ 37 files changed, 138 insertions(+), 40 deletions(-) create mode 100644 Plotting all shapes.R create mode 100644 Plotting_all_point_shapes.R rename Protocols/{ => data}/20220421_Resultaat-metingen.csv (100%) rename Protocols/{ => data}/DRC_Histamine.csv (100%) rename Protocols/{ => data}/Data_Arts_Circularity.xlsx (100%) rename Protocols/{ => data}/DualLuc_example_data.xlsx (100%) rename Protocols/{ => data}/ERK_repsonse_to_S1P.csv (100%) rename Protocols/{ => data}/FPbase_Spectra_4FPs.csv (100%) rename Protocols/{ => data}/Rac_S1P.csv (100%) rename Protocols/{ => data}/Tidy_design.csv (100%) rename Protocols/{ => data}/df_tidy_wells.csv (100%) rename Protocols/{ => data}/figure5.xlsx (100%) create mode 100644 ggplot2-geom_point-shapes.R diff --git a/.DS_Store b/.DS_Store index 70868b905aa8b7055922bb04d485619e5852d5f7..3c5f4652873e9f203a469d9a62389168275d409b 100644 GIT binary patch delta 1157 zcmeIvOGs2v90u_JcO2zj4(6E|b!@tlV)>kGOmkF9%^sEmI_hY)NE`JEm&O@!d}KvZ zxXN;Kp`wU1qM{%IA5m1BhzKIcTvQOY4We=rq!1lvpk1_R(WbLFhwr==zi-Sp=DV9> zHM7K^;wj(a$|x=>H77-tId5&!c%swa;&0vG)*-}TL~qiAfdOMk-xV0pBj!X(Pg$GM z6%I8UNA(V28#46ahQ0wK9E!B+{SmpU>YX(XEpuc3=92R5HGAsn7m|e4W>4na{A}}r zn-zAqhx;S)y$C33^t8amx&N>c>J||-w&O11&X!=HQxA%6Rf%5OTFT8Sd$Rmt&VFq) z6zJ8ns@)VF$+6|v3{oha+*Ct#)J}agLgRFfuFwq4(i}adm-Lnv=_4)CH~LP?v;qqf zkpuxNoX9~Q@=<^iRAUEf;DrxOXoepL(TQ&8=s{x`gBZpUjNlYb;|$JX0_QP_DO|;E zJitRd!eczcJYHh~@9_m+v4mx2Veu@1B{9Kl%+9h|4s)||R>^8jXG*KI*J}6H?yK|u z#(w=D?9I$nLjsMbZaTm>D3VUZFQlz?uG4aOo+7-eNQgz3R;Y+sMX+e(MOv{c%Mfv~ z=+Zo@A`lA|e48q35tdj?=cd(>`#1d0X`bHD2l^!We;^JD9LPW}3Q>kiR7voi*o}HL zpi#1~qPOD^0_Z{zy$GWZ{qP*aah$*?PD=c7$-jz!0T*!zmvJ38a1*yMjTy}09`4IJ ep5O&u;obD2BUhPD$XKzY{qNx)_FyhLvVQ_Rxep%z delta 1192 zcmeIvNl27Y00;2*f0=!sz3k2I*qCD`E{!?kq?6iWAubteIwMBVIO-P+j^i?;fzx1w zQK4;qmuNc`MUq&ycdU$}yktaBLe`-UQP(1 zp8Po=k0qKcX&E_r>xwpRE#Fo%y_{>bIz40RTWvL%nys_Dm^&n{a-Ss6@2;^i=5F@~ z+jvNht=Jtb*%R=!C;{FkOY?^c3YmIBrx!0=)Lj^uJ1wV|+JAp8kra|o%E)%oOnOL! z93`j7D7ir%kxBBB%#csy3;6~h9x@WJ6ndl}6;`An2QCz$7$qn}9d@7|yU>glw4x0i z=s_60=)(XG;t&qw2u5%kXR+lR&f^lsaShjTA5ZZN&oPBpn8ka1z-RoVgn}keJvC4x zO{G@4il);->Y}Bziq_Ct)of@K_LhpuiYiw9SNq%r*{j^>7eM{S+?{N-BJ&`F{`pum^R< Gl<^D4?->jL diff --git a/.Rproj.user/shared/notebooks/paths b/.Rproj.user/shared/notebooks/paths index fc3f1fc..731afaf 100644 --- a/.Rproj.user/shared/notebooks/paths +++ b/.Rproj.user/shared/notebooks/paths @@ -1,10 +1,14 @@ /Users/joachimgoedhart/.bash_profile="37AFE5E3" /Users/joachimgoedhart/.tcshrc="EC8A189E" /Users/joachimgoedhart/.zshrc="9DA4BB78" +/Users/joachimgoedhart/Desktop/TimeLine-test.html="085816EB" +/Users/joachimgoedhart/Desktop/test-time.html="0E754777" +/Users/joachimgoedhart/Desktop/tidytuesday_minimal_example.Rmd="DD039EE3" /Users/joachimgoedhart/Downloads/Upload/app.R="A891C7D0" /Users/joachimgoedhart/Downloads/hello(1).qmd="E7056D1F" /Users/joachimgoedhart/Downloads/hello.qmd="F62B7B40" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/.Rhistory="22E3F88A" +/Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/.gitignore="476F9C7E" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/01-getting-started.Rmd="7443EEB0" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/02-read-and-reshape.Rmd="1CE9F3F6" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/03-plotting-the-data.Rmd="9E302B83" @@ -12,6 +16,7 @@ /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/05-Q_and_A.Rmd="0C7CFD35" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/FlipBook_Protocol_3.Rmd="DE5C7C25" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/Overview_of_protocol_output.R="B92A818C" +/Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/Readme.md="2DFCDD01" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_1.R="375423E2" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_1.Rmd="9105BCD9" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_10.Rmd="FD13E331" @@ -19,6 +24,7 @@ /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_12.Rmd="233C5A29" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_2.Rmd="FFD80FED" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_3.Rmd="C0BDFDF7" +/Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_4.R="A51D40F5" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_4.Rmd="D1EB2369" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_5.Rmd="BA9DE4A2" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/Protocols/protocol_6.Rmd="18F95A81" @@ -35,11 +41,32 @@ /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/preamble.tex="78F1FC63" /Users/joachimgoedhart/surfdrive/Bookdown-project/DataViz-protocols/style.css="92FED882" /Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Conversions.txt="A9DCF86C" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/EC-FPs.csv="8662EB97" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/EC_FPs_Cranfill.csv="FDAB563B" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Fitting-exp.Rmd="0DC1B273" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Pi-chart.Rmd="912EA351" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Protocol_17_Animated_plots-ECIS.Rmd="A2B4589D" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Protocol_18_Animated_plots-with_GIF.Rmd="E566FB86" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/Protocol_19_Plot_Ratiometric-data.R="5B481DDF" /Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/bar_dot_swarm.Rmd="46CF760C" -/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_12.Rmd="2DA33543" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol-20_Fitting-exp.Rmd="026D29EF" /Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_13.Rmd="EB8281B5" /Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_14.Rmd="466AF742" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_15.Rmd="C2BE434F" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_16.Rmd="8541AA09" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_19_Plot_ratio.Rmd="8913928B" +/Users/joachimgoedhart/surfdrive/Bookdown-project/Protocols-in-progress/protocol_20.Rmd="F7B79CEA" +/Users/joachimgoedhart/surfdrive/Eike Mahlandt/Opto-Plots/Animated_plots-ECIS-zoom.Rmd="048042FC" +/Users/joachimgoedhart/surfdrive/Eike Mahlandt/Opto-Plots/Animated_plots-area_animatedboxes.Rmd="C1A27801" +/Users/joachimgoedhart/surfdrive/Eike Mahlandt/Opto-Plots/Animated_plots-area_staticboxes.Rmd="5A836299" +/Users/joachimgoedhart/surfdrive/Eike Mahlandt/Opto-Plots/Animated_plots.Rmd="F5CFB84C" /Users/joachimgoedhart/surfdrive/Flipbooks/Flipbook_protocol_1.Rmd="D3BAAD09" /Users/joachimgoedhart/surfdrive/Flipbooks/Flipbook_protocol_3.Rmd="8B38D5B3" /Users/joachimgoedhart/surfdrive/Python/Notebooks_Image_analysis/README.md="09185D1D" +/Users/joachimgoedhart/surfdrive/Shiny-project/DataTool/app.R="2E808BC9" +/Users/joachimgoedhart/surfdrive/Shiny-project/Glucose_Insulin_model/app.R="DEB4C945" +/Users/joachimgoedhart/surfdrive/Shiny-project/NutriKinetics/app.R="C94C898F" +/Users/joachimgoedhart/surfdrive/Shiny-project/PlotsOfPhasors/app.R="28DAFF65" /Users/joachimgoedhart/surfdrive/Shiny-project/VolcaNoseR/app.R="42A09032" +/Users/joachimgoedhart/surfdrive/blogs/FocalPlane/60 Yrs of GFP/Timeline-GFP.R="0C18D165" +/Users/joachimgoedhart/surfdrive/blogs/FocalPlane/60 Yrs of GFP/Timeline-GFP_inverted.R="867EF7F8" diff --git a/04-complete-protocols.Rmd b/04-complete-protocols.Rmd index a1cd7bf..3064817 100644 --- a/04-complete-protocols.Rmd +++ b/04-complete-protocols.Rmd @@ -5,7 +5,7 @@ knitr::opts_chunk$set(comment = NA, warning=FALSE) # Complete protocols {#complete-protocols} -This chapter showcases several *complete* protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github, just follow [this link](https://github.com/JoachimGoedhart/DataViz-protocols/tree/main/Protocols). In the same folder you can find the R markdown files for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the R markdown file (and the data) and run it step by step. The R markdown files can also be used as a starting point to apply the same visualization to your own data. +This chapter showcases several *complete* protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github in the '/data' folder on [this page](https://github.com/JoachimGoedhart/DataViz-protocols/tree/main/Protocols). The github page holds a separate Rmarkdown file for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the Rmarkdown file (and the data) and run it step by step. The Rmarkdown files can also be used as a starting point to apply the same visualization to your own data. An overview of the data visualizations that are generated by the protocols: diff --git a/Plotting all shapes.R b/Plotting all shapes.R new file mode 100644 index 0000000..4b336ea --- /dev/null +++ b/Plotting all shapes.R @@ -0,0 +1,24 @@ +library(tidyverse) + +x <- rep(0:15, 8) +y <- rep(0:7, each=16) +shape <- 1:128 + +df_shapes <- data.frame(x=x, y=y, shape=shape) + +ggplot(df_shapes, aes(x,y))+geom_label(aes(label=shape)) + + +df_label <- df_shapes %>% filter(!shape %in% c(26:32)) + +ggplot(data=(df_shapes), aes(x,y)) + + geom_point(shape = as.factor(shape), size=4, fill="blue") + + scale_shape_manual(values = c(1:128)) + + geom_label(data=df_label, aes(x=x,y=y,label=shape), nudge_y = -0.4, size=2, label.size = .2) + + theme_minimal() + + theme(legend.position = "none", + axis.title = element_blank(), + axis.text = element_blank()) + + theme(panel.grid = element_blank()) + + scale_y_reverse() + + NULL diff --git a/Plotting_all_point_shapes.R b/Plotting_all_point_shapes.R new file mode 100644 index 0000000..1a8116f --- /dev/null +++ b/Plotting_all_point_shapes.R @@ -0,0 +1,21 @@ +library(tidyverse) + +x <- rep(0:15, 8) +y <- rep(0:7, each=16) +shape <- 0:127 + +df_shapes <- data.frame(x=x, y=y, shape=shape) %>% + filter(!shape %in% c(26:31)) #Shapes 26-31 are not defined, so we'll remove those + +ggplot(data=df_shapes, aes(x,y)) + + geom_point(aes(shape = as.factor(shape)), size=4, fill="blue") + + scale_shape_manual(values = df_shapes$shape) + + geom_label(aes(label=shape), nudge_y = -0.4, size=2, label.size = .2) + + theme_minimal() + + theme(legend.position = "none", + axis.title = element_blank(), + axis.text = element_blank(), + panel.grid = element_blank()) + + scale_y_reverse() + + NULL + diff --git a/Protocols/20220421_Resultaat-metingen.csv b/Protocols/data/20220421_Resultaat-metingen.csv similarity index 100% rename from Protocols/20220421_Resultaat-metingen.csv rename to Protocols/data/20220421_Resultaat-metingen.csv diff --git a/Protocols/DRC_Histamine.csv b/Protocols/data/DRC_Histamine.csv similarity index 100% rename from Protocols/DRC_Histamine.csv rename to Protocols/data/DRC_Histamine.csv diff --git a/Protocols/Data_Arts_Circularity.xlsx b/Protocols/data/Data_Arts_Circularity.xlsx similarity index 100% rename from Protocols/Data_Arts_Circularity.xlsx rename to Protocols/data/Data_Arts_Circularity.xlsx diff --git a/Protocols/DualLuc_example_data.xlsx b/Protocols/data/DualLuc_example_data.xlsx similarity index 100% rename from Protocols/DualLuc_example_data.xlsx rename to Protocols/data/DualLuc_example_data.xlsx diff --git a/Protocols/ERK_repsonse_to_S1P.csv b/Protocols/data/ERK_repsonse_to_S1P.csv similarity index 100% rename from Protocols/ERK_repsonse_to_S1P.csv rename to Protocols/data/ERK_repsonse_to_S1P.csv diff --git a/Protocols/FPbase_Spectra_4FPs.csv b/Protocols/data/FPbase_Spectra_4FPs.csv similarity index 100% rename from Protocols/FPbase_Spectra_4FPs.csv rename to Protocols/data/FPbase_Spectra_4FPs.csv diff --git a/Protocols/Rac_S1P.csv b/Protocols/data/Rac_S1P.csv similarity index 100% rename from Protocols/Rac_S1P.csv rename to Protocols/data/Rac_S1P.csv diff --git a/Protocols/Tidy_design.csv b/Protocols/data/Tidy_design.csv similarity index 100% rename from Protocols/Tidy_design.csv rename to Protocols/data/Tidy_design.csv diff --git a/Protocols/df_tidy_wells.csv b/Protocols/data/df_tidy_wells.csv similarity index 100% rename from Protocols/df_tidy_wells.csv rename to Protocols/data/df_tidy_wells.csv diff --git a/Protocols/figure5.xlsx b/Protocols/data/figure5.xlsx similarity index 100% rename from Protocols/figure5.xlsx rename to Protocols/data/figure5.xlsx diff --git a/Protocols/protocol_1.Rmd b/Protocols/protocol_1.Rmd index 200b1c6..250044f 100644 --- a/Protocols/protocol_1.Rmd +++ b/Protocols/protocol_1.Rmd @@ -18,7 +18,7 @@ The data was downloaded in CSV format (by clicking on the button in the lower ri We read the data from the CSV by using the `read_csv()` function. This function is part of the tidy verse and loads the data as a tibble. It also guesses type of data for each column. To hide that information, we use `show_col_types = FALSE` here. ```{r } -df_raw <- read_csv("FPbase_Spectra_4FPs.csv", show_col_types = FALSE) +df_raw <- read_csv("data/FPbase_Spectra_4FPs.csv", show_col_types = FALSE) ``` Let's briefly look at what we have loaded: diff --git a/Protocols/protocol_10.Rmd b/Protocols/protocol_10.Rmd index 3dad6fa..f4dca3e 100644 --- a/Protocols/protocol_10.Rmd +++ b/Protocols/protocol_10.Rmd @@ -21,7 +21,7 @@ After clicking on 'Publish' a link is generated that can be read as a csv, and a ```{r} # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") -df_sheet <- read.csv("20220421_Resultaat-metingen.csv", na.strings = "") +df_sheet <- read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) ``` diff --git a/Protocols/protocol_11.Rmd b/Protocols/protocol_11.Rmd index 985f91f..8c1b636 100644 --- a/Protocols/protocol_11.Rmd +++ b/Protocols/protocol_11.Rmd @@ -18,7 +18,7 @@ After clicking on 'Publish' a link is generated that can be read as a csv. Any e ```{r} # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") -df_sheet <- read.csv("20220421_Resultaat-metingen.csv", na.strings = "") +df_sheet <- read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) ``` diff --git a/Protocols/protocol_2.Rmd b/Protocols/protocol_2.Rmd index 33049dc..674f326 100644 --- a/Protocols/protocol_2.Rmd +++ b/Protocols/protocol_2.Rmd @@ -25,7 +25,7 @@ Confidence_level <- 0.95 The data is stored in an excel sheet and we read it, skipping the first 6 lines which contain comments: ```{r } -df_raw <- readxl::read_excel('figure5.xlsx', skip=6) +df_raw <- readxl::read_excel('data/figure5.xlsx', skip=6) ``` Let's look at the data: diff --git a/Protocols/protocol_3.Rmd b/Protocols/protocol_3.Rmd index 6e5e2e2..1fed032 100644 --- a/Protocols/protocol_3.Rmd +++ b/Protocols/protocol_3.Rmd @@ -18,7 +18,7 @@ library(tidyverse) The data comes from an excel file: ```{r } -df_raw <- readxl::read_excel("Data_Arts_Circularity.xlsx") +df_raw <- readxl::read_excel("data/Data_Arts_Circularity.xlsx") head(df_raw) ``` diff --git a/Protocols/protocol_4.Rmd b/Protocols/protocol_4.Rmd index c882fbb..5d571ed 100644 --- a/Protocols/protocol_4.Rmd +++ b/Protocols/protocol_4.Rmd @@ -21,13 +21,13 @@ library(tidyverse) The measured data is read from an excel sheet. Note that this is the raw data that is stored by the software that operates the plate reader: ```{r } -df_raw <- readxl::read_excel("DualLuc_example_data.xlsx", sheet = "Results") +df_raw <- readxl::read_excel("data/DualLuc_example_data.xlsx", sheet = "Results") ``` The experimental conditions for each well are stored in a separate CSV file, generated by the experimentalist that did the experiment: ```{r } -df_design <- read.csv("Tidy_design.csv") +df_design <- read.csv("data/Tidy_design.csv") head(df_design) ``` You can see that the design file is tidy. In contrast the excel file with data is far from tidy. In the excel sheet, two 'rectangles' of cells define the data for the firefly & renilla reads. diff --git a/Protocols/protocol_6.Rmd b/Protocols/protocol_6.Rmd index 73691e3..4a99986 100644 --- a/Protocols/protocol_6.Rmd +++ b/Protocols/protocol_6.Rmd @@ -19,7 +19,7 @@ A CSV file with the data is loaded. Since the file is a couple of Megabytes, we ```{r } library(data.table) -df_S1P <- data.table::fread("ERK_repsonse_to_S1P.csv") +df_S1P <- data.table::fread("data/ERK_repsonse_to_S1P.csv") head(df_S1P) ``` diff --git a/Protocols/protocol_7.Rmd b/Protocols/protocol_7.Rmd index 965b08d..5df8be0 100644 --- a/Protocols/protocol_7.Rmd +++ b/Protocols/protocol_7.Rmd @@ -17,7 +17,7 @@ output: html_document ```{r } require(tidyverse) -df1 <- read.csv("Rac_S1P.csv") +df1 <- read.csv("data/Rac_S1P.csv") head(df1) ``` diff --git a/Protocols/protocol_8.Rmd b/Protocols/protocol_8.Rmd index 25ba1c8..4eef497 100644 --- a/Protocols/protocol_8.Rmd +++ b/Protocols/protocol_8.Rmd @@ -1,4 +1,3 @@ - --- author: "Joachim Goedhart" date: "`r Sys.Date()`" @@ -18,7 +17,7 @@ library(tidyverse) A good example of data wrangling related to 96-wells data is given in [protocol 4](#protocol-4). Here we start from the tidy data that was the result of data tiyding in the section [Data in 96-wells format](#Data-in-96-wells-format): ```{r } -df_8 <- read.csv("df_tidy_wells.csv") +df_8 <- read.csv("data/df_tidy_wells.csv") head(df_8) ``` diff --git a/Protocols/protocol_9.Rmd b/Protocols/protocol_9.Rmd index 60948d6..23056a4 100644 --- a/Protocols/protocol_9.Rmd +++ b/Protocols/protocol_9.Rmd @@ -17,7 +17,7 @@ library(tidyverse) Read the data: ```{r } -df_DRC <- read.csv("DRC_Histamine.csv", stringsAsFactors = TRUE) +df_DRC <- read.csv("data/DRC_Histamine.csv", stringsAsFactors = TRUE) head(df_DRC) ``` @@ -117,13 +117,13 @@ To plot the fitted data, we use `augment()` function that is part of the `{broom ```{r } library(broom) -p + geom_line(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1) +p + geom_line(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1) ``` Instead of `geom_lin()` for plotting the fit, we can also use `geom_smooth()`: ```{r} -p <- p + geom_smooth(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1) +p <- p + geom_smooth(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1) p ``` diff --git a/_bookdown_files/DataViz-protocols_files/figure-html/unnamed-chunk-83-1.png b/_bookdown_files/DataViz-protocols_files/figure-html/unnamed-chunk-83-1.png index 4d7f19cf2998fbb92dfa464df76853a3e39446ca..753489f0219eb1caa3ea4f1bcbedc4bf72f27f60 100644 GIT binary patch literal 59213 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�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
  • v7jBb^B05TwTYsAc<0ELWwU9jfh!&|<@(F~vg*^0Zz55U^4~ zA`Z;amP<$?o~9=^FLBB}B-eD9(E@FCo|L1KQZX7&Aiw6yv3J-Xnsef8Q?!`q=;-S} zF%X!$?!aiwf(k!FT*s6;>o?;=b-#sVOgqpyP@DZE&99mp+{v6mH1v)5WHebscq*mUhdo(;kEr*Nb3wQbo4&?e?oaDb& z6f}~u4cJ*-LE$aCY5`GFZ9aM~HqzSzDtuN~Qa(qLv50B}3&wwDrrWkYiWma)>}67R zG8U@K?Ilz$(KB8z*)!g4QnCRAPGah!S=<=yPrrDz1p$gTTI*BHkY1B=Mpv<1YYDFK zh8F)5RSKq_%eYh)#Tf%KfT*KLUm{)HUww)F$XB8oq zwd-t^xRBjc*Gugy9D>9N{W;g-`u3?Z{W8np_lepFHf;0}*?w`tU%^rU3M5JG6ZSjU zOIdWmG!jRI?%h(YR&ZUezj&~lHj_`SKBGx1IB~B--6ghC@D`*zOY&Q=fFdD*`@;R< z3)2?Hac#3&XLocL483-v3^#MEf+FTM*{tXV;2LXwL>Re9r473_rqANsg3U~C8SD?x zW(c@xaj6aZDyEUB0Laf_?(qn#7AfM3+JJK&_y66jf*Cn*NZ8^o9oXaM-F?H=SS4=) z%?v{oferl}PlKl1XYsO^jJ9GAN0}lLTvj`o=K;AOKD3WRHv-9n$K~BGHdS;HTh|E& zZn{!?{S4>Ev$NGt7=f7eLiIt`whT3d70F103)&T=r z$qRLS+fqb%feCTyi&H53>KIfc-wF>PT&j3M3;ZoVpAQuYE?)=eY z1!Z9d*VSo+CIk%rH}$lIP~W)@8cXLmmSR2}6`<#7Vv}>4Z3~YA+P_9u?!CcWt8J03 zBSlD)o81541MG5Xub>b&YqMzOM0z!VTQkVdw?fwP*(U8~Qw&7dpgs~3oVFeNkfd`U zofoBu*tBOBKxxYk?wh*Qts!m~5Q_d7X|)PmptKiQq!oz{LX=#(e)jF)K?cOMlai}^ z>j43lI?q%^=DIf5RF06xAY@~^1H_Z&o{JB5?el=bsg$#`GgO46EG;eh`1wm)GK|um zr#mi8G_Ot%XD(E7=YIWM!~Bl^XUz@(LIvoe3ww?@pkG*))%jbCQ{BxMaZvFRn)uM` zZG0D@E}EJsMCg-BUh4`h#(^_JxG!&OBhmaz*W`sunS(-4+mdeS7C(SdMjZ3oVncBf zg8~wCYGZ3X=>%G<25FY+0A8eV)FKp^b-M?VhS0jVmo|%icl#F)@M%zP?QRg%NWLlC z<{aAIkjvCagXzw_E+C*eSJ9;LXXDkcx9NidOckYu%63Gz<3k@O9Q*IQt&QK7fdAIz ze~G-rNZ-D&H4ETB8ULSh{GaasXA`%Avn_w{pUwZz7yer&{y*CZ97}nQvI;W>n$@Li z!o+2jgYFpKK!$W66t?T{Z=K`Pjy3|o0p;no(V3xWr+5bgqn}_!;KsWuJA~*bI zHEO;a2lrTA!c+wdmIF!i4$#S(SGu^LcD>o7j6p4D87`yDfv%76=r{~gPE5!_(^7N3 z$MUI`y1U0nHYy;9Jo7PcN1&E=&u zZK-N%(tmI$57o{1#YIijZ0HJsJqeYx^Ri~uh1})QlX>KvPLp4$ttCXpub5Q-(QmRH z1A9a1mo7y`>R-Etge#~5IOde!xShEE((=t?|9j38w|FP}TPq#UA)N*-WEtP|{D7RA zSVdO36p!@xh8QW+|6CQEAMrE1@rwM(mfvyvcKFtSbflMwe((PsfN#6Tp$b^Aq_&l$ zKe&xQV`7vS(36ew9%%l-ar>FbV3JNjUi04#|IaR|;tbwwpnlj>0Ed!{NB*{#6tNVT zm%GC|7s~|iz~qYQC?03_FsGR>q}f-hwl{Uhhj32PS7LZ_PoPWx$x+h}$GibB5nAke z(2KN{p1S$rJ?C=HU%6=WZ%|(daY)Co#E-z55&)`GD}yAQ9h~M8w7n2$bp>$c4?u`) zXD*}_z1g@UjoK2toR`QY_(p!nNG@MJrJjBgTD`POZ|H|oTU%SFn6zfT7BEo{aa~_R zMgc4q(-u%Dh)w^amTHsumy40~or2X#$E`z$TnRDlO$r3KLJ*Jw=+r9he#{t_p9g)V z9{_aieRxp*$%FkOCzJB$TM(n$t^7v=!nRFNJb+0h4j0WdEqOv|{)IK51gYB~ykw`f zQSF+6U2^3x!Gm+N0}5&-0bVp~Rc0;+0lDm$w)zd2|IX|IrDw<7B*4*YK-&Jev{6l) zo+p1+32BGEF%_t#ko6hh;P&YhALmohjc^dnU8|CyI&K$V{;KAkC7NkE)S2DmK2v<5(K`)W3*1(34pR zbjeU^@2*p#C2FV~BxXLdAk-;;o5rT5a=?eX7iVK6=_i4|`o?jgaPL2ImKc{&jn0bu zHP9r!)@(9`J{DEuG;o${&~bZ9c7DLzA-c@q)&anm`KNt?cM}RHb6(f-mecvVhXE*m zd$TEeTok&@Qg!M)rhUZcU*lP2scUW5K6a`B|EAU;m5`}4#bzMT_8!D8{zK!$VDb5w zd%KkLBvdzS+F*i&he*d?X_OS-uZH*G8*t>ooCI^|iPDeIUk(eiwUSLJc3o-htX6%h z;CZZhrz~v03hpY#o6UE;VXB|URoG?57yHkVCFl^+)YNpEu*A0dGXJYB=;tP)XlWNK zM=r45w}XzG-jRf4?{o{t6pbUp_5kse@i*PPHpcF~UAx%vu5PGY0#>>u@ za5N?o#sDdZQW`g>vO2E6@NqhxW81lgS8rtu@KoheIi2N|N*(gwtElW-^paJ!=Y6<9=AF)@0h1S&Hh~4t^-lhsZZqPfHvN#3gSnm z3ydWI^?tK~CCjWv`hGNJ1axcW+5hONab35BPT)P8G;cC#&Y2#*t)@MIe;ujZNI|7ffS0SnZWoEy4*lr75*AWB2g2soCgzFvo1uGVI!Sq@m^Z4zMit zA_jU)%K`SJL#)Xu%^W^QNm2WmKIkwtO3OzdiRC-b$Hfp-TxXTLT1u-;cj3`q^bb0o zEi+7FrFF}P0H-{z50-o^0rwCZph!`O9guc_%EML^rRYh3<{O0J9?z@Loed4IoMW*P zU1nyo-9v!Jr3s&-1z;Llri^JGx^$CiKk5GTILkKYH%usU^8Lys5z*_{MOKlC9|=i0 z97tcMe8@P}7E%YKM4soSjtVT2+R$t{Ha~AQcnukwr1lNS`q0~QxOL}(%*Y?k$v^b4<{Qv*}-w3 z`Xg0CySYZSUS#-&0%%?+d&ST09OR`QR1W{c`C|Hu~NI5~;hoOCV zD$NZhFkOw5*3J4T2}3fPW9y2I3brZHW7((}8MhATRyCi@U(n+c>V0;$2Wcf{h|#b` zjB=cRC^T!oDA+N=heM?cY7}2p9T{Pam(7X;dkX~93&vWw^yhU*-F#)T(3RaoW!F}~ zThvMrx*x>|i2jFxAfq!SAo2cqvoPPo3)+kmu6=+mT>_l^7vZN{i^4>Xf%Z%2Ge9~6 zpn>tFYGB7T9*xXXNAYu^owU8XV0g|VcQ_yNqK0p<-)<*X z3dyO;Hj(k5{tpGS>mq*Gk>>hD=u)Ut^I;HY&X<`SyFBOEvVU-EbLKNqF@!jA^y2E$ zk6s_wRUKoPQzo(ak-QA-|H50L!QUYIXDKFkU!Yg87Ov&v7LmrU4ESMdFn83{; zJn2f#IVzGF{KQyxJUL5$`7klz{gSIw#*Itf{*zl1T2L9JuUPTqvWmdd6#8IS``D)a zlATzQ;w%l8GwB0!!CazQhM0mSoAYWfqffd+ogPN0>I0D)%E2Leb7h2*Hhu7>$rLoWjHujy6TJKoV7$`E~c$5IQDQkLf(`ckf?$T)b*{x~y73)fCd`Y2Bn5fO#uuCMr+i+Nh$Y zi$%pKR3p=f6eQQIoQ7q!E4<}C8aSB#@kGM{Gtk1OPj<{N(hH4=Qg(@t$>;J~T!kJR z3S{yU;#W?{hrA9A=y1)l(N_u5wt~d9x#&T<$6AQ6Wly!}xU!sX@ zniJ8GoM8K_Dt@ca#~zm;%o{`t^?pD>UoWfwEgRBTBYV-I;i`F-7l)GE-w^)d=Qy+2X5JfCjVY{v2lYQ zDbE6QcJFt`iqfdVgplRNmX5W>a4D&PmC_|_tH zo5A7weuzz-W18xM^V0KIXDUU<7aneDvKuOD4>F_cg|sG&*h+uvd5lXdPl$7&ebU7? zA?rQcV?I}xoJzxqw(Q#P->=W!j4(MI&7Ob+#R$(})ON=1|Jn49IQ6cD|xCwo>bjgPVV*ybgnYX$?9%NT|*G+ z667#BY4>vFZyz@xkR@ZGHl=K_zH8u+KP7DhW7dY_ww@H=hf>nF3wdbL80cXK1DcvF zjy86{hL~PZn2dzHV%6AhDYHU0D?S;#OE6n{hP!u*NOJxf`xUwIi`SH*{Cc+FS&aID zlW4r4Tk=BP55Eq2a3(zg0*N>@B2Z{=EH`O zDD|i{WR&A9zDrIpJMrt#X4OP>Kd-ziSrM+Yk&IQ+Zka0bq$gl2Bk(;k_m4KL zQ;kH6eozWGQjeFX6#3;%Vs9al^R*cHD(;1+Y++9jD--;B4XV)9^PymOkl}~AK8#Q& zznGw*~)CwY5cg=0zYj{3fCN8-L zVJ=`nBd42dTm*uHPgW_s%0!q^E|9}zDQ7v%jTooSrRxAF)@%f`E)DJ534gmJKknxP zgmPreYpa8jHTOSJ8AdlY)*Dnnj`@#+YjAM|U!lH(b{>qr8Ke0zE8cDsCjC5m$`VSG z<64GC&_M*>`1JLKGnGwA^~iqw2#DOTyX8{mA0fG~6(!Jo%;|svwK?m`jHvTR*upwyhyz9=U39mgc``kYve zW&K%k)P=JreF?noKOszgmFMyZkNiQmloO>6AKBdDW3LZA?qmI|eu?4M0oFq&s7u@^ z>zL1yobeGC6!)1Gvn_NQv~P`$i%;tQmY)^x;+Xg*VL}`#ur4tP!Rt*OE0xsp2)W=c z|3b*6z%)@=;`2Wwz>cXt3;=h)qk3MKe+l$HzZRoceWpE4U*W1#9RJN!W~X^n_f4W@;?RpL_QH&wN(kLeaRyK2d7nS^vUjA|%;(9zh!`4%Ioj0#{oG1i#? z4WsmB_yvZc9i8{|S8k1cPeF!)U5AM{32pWhYk_O}w@+*t3|ttIIxAik?gyv#(q#lC zsD0g)M&tnA5Wx;Km+O*$zYNK$^eyPsEoFFf11*t|p`Wp2kYb-KYbm`#e1#0misQiy#KKy$!6NZB< z1csq)j&tzjDL9mUHy~+Gbfpy#OXEfK<|GF77CFN&Q@3R511D@EP$*dj*8r0b>c;#^R?y z)VN4F`Z*Gj2{}OTY}Aw6yOnm}o}+FM;@Sjb)AzFJyBY4-rB~Wr2uCXfAUP?L9B4ZJ z?7SFUXEV`u<6+EU7Y1bL9{^4NRC70O>&n&eclZVb`N-VN5McjYUmcO$c|kQMHinx{ z)1{je5|B}!M&I5&-Fx0r8+Y@YmUd;AWvK`Ci;ZLnm|=mCb$iZYm#*xk7fCO;mbVqs z8~h;9?IfH9F5EMqAc`W{=!dCdvR1L@N4FzSCdmInMQy#wVFawy$J*76NfhTimOkqtTrH3u-tixdy&Bo`UB}1k-HFMKT8+uTpcb(#^KWh!k%Y6S^8zFXTR!BATvbiMQy0gimkvP zV;J3dQqNVOKuu=Lp0_+kH51}CCx^nwgt4X@P@P#F)0b@Bu)cup+xV~tb@af@Z=4+S zh!`1Wamo{W`u6!xyBz|y6!RQW1%q2Af7VR~E5Nk)gvQ!5&@+8s_Ayv?1tSC5kS6a^ z=~+mPkQkb3g%gNb!$qH*wzl%;e(@iF-YSiZbU~&T-8o@RLsMyTeAnJX6bNfN61uLR za~?Gsve~;i0K$buasFqz2-_$~CgiHFIqdJ6-43+ceOmLt=P|Ov3v$+kD@nORV&>KM zaJ{K;-5Qyr4ilE0SURS?ZTalD%(j+dQ*cqb#NU#&86{z0O%KeM^n}Lj5=hQG$B)l+ zW`>GbdjLQwHQABRlI8o^8JRNCCN!R2?{P0ZmBpGLQ9A=~WI^|?wI~Ij)tBdOYvW;G zU`kAo3p^8*6wo=}LdKIv0lIAK;Sr3mp+i6{qz*X&xtk{06~P}6E*gRxXN8Uu|27hE z;n=()P1|;Agxl;v?SzcO)XI0DmMY%0pYHltL@taqxpPOhdY2|xWMqU0LI=BJQK=6D zBHz~~&(wUSh6)N!84;;{`S32K+YbAE`!=3W_G<^(yV7b}UHuv& zoF*jUsw4zDc^x85-g>@II0fgCYmdh&xAp`#? zthLgW8x{cFd4^1OIde)Ac)P2^*mX4T(e!HHyv>Qb{Ks(F{4y_ypIdzEg%BJWZoqxN zCggA+*T(%XhhJvjb%Lc%6n?gArJ8lB88D`AUFMG+&Mq9Ns#s{Q79I@AqSta5hY{T9 zv@8-kjhNr$Iz*l@C&bv9Ak_?^sKhv~*P`tb|-BY@| zaNOw6?R{Q^%tb4QIF!PuDak8jF0j-nxXwZw7t-hJ{sQrJcPi5mb~U@EkUye!94B!c z_y&)#*p;?H=73#yKOjz~F!71vBcE(BF^vgN`=$N>wW-XFjVKxz4nmZ?M62fA9m%+6 zaJO^;L8@Owi~-8`L)r&DTo+ZEvQ%HRtUjE7lRM%!JORsy>L*5K>U>W8ViBAgvUFqF z7Huhg#sC*CH1_@zGg}E#Q$XgY@W&h-+yqfM$zC~=<4zIHLJcSGkjM>` z&f`W>#0xww)1HsV1QrCVR7r(LMUHXq(&MDpXyO$wFdCyil{dc5NXy;;n5) zN^Q8Fr=Ymn}ukdJklRez~q>xoWIR`KC#j6|T*{xv%B?pt8RwTde|E!gpXM=rm-Df(T&J zXlvK3%`?6c=$O@~Fp8A0dXDT_?q%HgaJ_6}5=MTTSFp#FIClI9+m(!UbknOW7%__K zQCJEvb>`BKk^tnyxCmi>4c1?Mp#4bl7!>}bs{WG%z9c^*gGPU$)2oB5_HhX1;(V8!DPyYKGr$8Y=50S z5EFt0Opj?b=Se)S7*GG|AVF{|So(nzxMm9)1DL0@UpPtZgucgsLdE5?XUOf90{4ID zdnw!VF0Gm)ey#t^qEhAB&1y&y@6Z_RihxnH8xEiG($n>?T#(E^xki*qb=N=1wkuiK z``txtwaVS0D{=b|pLu&-?`jjT7R$YG6!++t$&{Nxk(35pm{WE!l(E#9)$aIt8~n}~ zGr{T0*2GT9s!fIB+T!|tiI9Az-f;waLZ?kawu1gQU1auIcBo70t*fTRCc7wD7tw115$oHdc^`nZV1_VNMI9Z;2x?Ub3&LN!Z-~$!sKMoe|IqOsvH6aK8Mq)wN4sLFMH&{e=eIh))d6FhZJ?cl54qPECcMD0DJCamWI98L5p zd!+V_j|Z0TWt0$eefn-ntL1B!UAN%I7nIO~a8>v8f~mX+#RerLjrb13}VjeWOV4Rxec7xT?_=sZ0Ky4kbw7 zjbMRJ5Y{E6YH(wJo|#ziIr-jSD8Gb4bvS++J~tiL2?NwtFj34*F<%}6xH**pHlgJ zXNoi`3EXQFdlG;L?)dM6Mp3-}9j*vD zABjHNj?Na@d?co&(${41>z0_N{)>=qC3Duj?qHF((o~S84=TBQoX~hNIGrF0o zEDF`hiNxA`34}Tk9!Q|eb^n#lA)xv5MxG%f=}(=6B6!~7NfX21b6to#0J?b9`mw=h zpZD(5NDUlbuMV2J^ymdL>INC2J^fU{iP>V8p-W#Fm$1&+R^SjJ^C=)(*7WL!XnMFtNZ@o~1Xm*W>GITmj$8g96 zNx7yQt|=fR?iUy};uI|Gi?hJAGOvCuB(eN92>+LdQJBRF1}v32M%@VYI(%&&>g!FV zNEP>Uv3z#kI#O9b8 zOoj@Pd6zVhNJZvTGKUH&^R82!5DkXRyCP-GoLQ$t88gph&YXGnuC+TlN#FOquHSY2 z-s`>I-#LGsbFlYkc%JpFb+3Ef_jGQMvqFGa0vCALk#BLBT@=DX`btydefA$lPEUEDr0I2so_a4L%64;3in zhC{u}zWarQ?N%DyF_8S{G-gjNFw$W*d>@W#9T%kRe^YfFQN1sfL&8|`qa8;ia}$!a zszHZWrOc4aAY_#OjK!$IogmTDGg!rd_%0O9HlSH7%e+GD%^@3^q#2MQe-AOHBDgsI z>1^6UtxXyR=G;Ta)PlB{NI}+{$-DjwuoyJ+XY<=ek`sI>bg6`0P$$H5Cq2od(FT3G z>wU=`&ZV&%(|+MnsmpWH)dzw&z3kg(pq|TYwcFP=(qC50y04Ccw<3{XO@wgLo(@cp zh}|pV4H=6yr3NtEn6uV{BA0WtG{BeavCTI&L*Q?i=?H@U>6G-?LhpgqTuDR_^=pCg zldJnohCsIW>?tPhCHWC8#U6d;K8^3&dD$|N9nQ4}-as0?dNoO3L!{qkDsD4IZwjG=CjcAk) zgdi%2+V`1LshMmT&e+7VZSnOg>5-Ue$rwjr!gN}uRk1*>7ees;Y!{ZCWzyqsWmL}e zgPaVM2D_k*v0-i|b8c*dkfG8mHaG(RT^mlIsn@FQ4RdSmEtu8wY9vN1r%D0^I?U2k zMy zCW;u`?yF6Tev`wek@y~xaAzp|Wg0X`XQ83x=omzaNTeDj!&6kgNgmQ)#RfvPl6j?; z6wi%h&Z@R{Y+UeA<4timGvs%1H{ZjUG?RR5Bh03Zcd2HoN6dT!m2K3t* zv>rX#egh(PGYs5C4eE3)!b>UDu0K}0b#sS*LLguh zC+@in;Vc^q8kTGal<)-H%WPPoEoR9w2G@z9jvN4=)<+a%gl7p+>ql15V(6NDDAh-Ve^3=Ad4~E>rq28KbDFh{b*K_ z{dYJ+{VchM+R*H}eZ!58^;7TSyK=1-;vA7%FQX>~$UV9kcdGTg4B?|&0f5M>C$y88 z_Gf3Z?mFpTRbm$IFbn;J79c;k*0l)9v`E^HGELob+qi#sEdP-P-G)?33@cxcA+unA zWe=mYg%5>9hOHnVjcgudoYma;OFcJ2bCoU*@Wx$N<>PoKPe)ZiH@La+w%YlbUD6ZB z{Q_uH086+IbHvSksr~$6b>>jemRzcg(t6mh_c<8)rp#Zi6b4Gd(rp3Yk=g?ky1*zseR4JIF05N&*^vR-0KOAQbJ%D_;bt&p&e|rO!l{h zj;da!Wg(##x{_cX^x~Z8b-?dDXEsKbpJ%>3S&@{n9%Wsjpx*`^z0-fbU&VK&h|>~^ zXG#wn#GPGi&0OA^oA`7gF6OzG%Y@4J^vuwnIN$`z7E=9yMkxm(`3galCziPecLEgr zeELG|(E#Y5umjxl8+e+e1&7OAB;y^-V-5(Ykrx4q^P(_tLl<pWMbi+O!L zs15r#!YJoq8*W*YZO!g92ORcO{cWCwFoGHlpvBd#PSM;fg|Ibk1!RiV&DH8UU-+3h z*G&l~(R6}PW87W;sQ@>2@x*hp=sxlu$S$=#8U7ToNPz;U`xM#j#CkGUx;XkxvvU=w zqLm(LHCzx8UiuRGD+~3yCO&WEdskE^6zYc<6B9tR3tpXM3q#C!Q!J%Inp;rp;mUm-j`!HrKP4Acm@e zq@)#4Ld=wSXE1@RY|$)TTYD+myNo*47w<~WaixmivZep$XNpN69C;8Fc%5q#Kkydt z`uf=#wObh{rvtPy<#N!ocFWirEjXU0Co3}u4y7A=EM z{(3mE+Q12Ua|I3gVve6){(PBEAcPLkol1UjKC3h6eeTh}9BnB2Z^i9)0cP-SkR6om^v=di)%+WSf6oFGpFIl^A zI)7_2c630ZAc5CDQDv9f(^;IaJycV%(%3@H-Zw%gGb6!FCKKP^02`@h_MuvcqRt7FiYPMi^%J_PNe4mvbLaV2ANr&B+Glm5uGZ zRVM?)vO)d8*S7Yq#2&4|jW_rxWstfmx!SR0wwWdKFQ9aKTUiMtV`nYmM%ZqhXaK~9 z0^X^{tun>*yYuQ}InShEFQZPYo5GA_SZjEVY7&_(I@8%Yo65BEGV+7$5^e`AP3++h z_&NO`C2qNlc_^AhVY$tF?lmV^ed#bA`&8|}>h{g#R!O?eZ9SiXVwVF}SR6=pT{E6= zU)=qf+zbVg%8WeqT7>SzDsXo?;U?Lq0u z=hDvLO(-d_I{yzrp7#dJec%4U?_IQ4NT$fY{0;QcnzxNjotZ9G*)K1yE+c>S&}L;|gx=E9zKYctE;DF-*_~$H=e|idgG4w_cp=nipK5{% z@y*U}b|SfrkUTsCk}K}uBEr2Hm;z4#@kgf4Rc2k4Yejm^$?=l!igA%cRqUb`1lC_R zeyhgaMBAUd8EdfB1&A`b z$Ttsd^G+-R+8OX4)&q5vcl1-f+9Mo|2A9kCf6na=^f+&*VJ0eW0Y_B~kOgwHVl@T# zTj-Px`w8gDVIR}fC$|cF0{S#?vxz?9LP|d`qt#sDM1J!k=f2+b0E~X_mF_~i*z9r%i4KK+&@aF+_+?KbNBQgIoq&(xm zT2`a+fhGXYC{4lNimMU;a+iH}HM$IhC38^F2;>Rwh4im_dIR@CB&Zpg(w@;;SguU1 z$sG`sDTY+*14<`c;3$IR_GllSdJUV9`^Q74L~8}<*iEZrL%3FZZZYD2S|oYepul%M z&?3#G_x2&J$n-GGr61Ysaemx)__l4z>*2P8PzCkh$uJ7uO|qfq$@NDAK>5uGws(RI(p51GrVJodb$7o;s4UZ>8yz{tE^wJU|=QDh`D6}%c~h+7&mNN z!kK#k+GprhfI=20f}|wDu7nAim|X`r`{HFlT3EbQ*Sd5;3IiL*c0G9E9K|NE3ydg; zfNAwQ23xZ$bC@3I^0nhpqu4HjfM=Jkk4Lu4r|*DHg`74V*&8&f}s^FwDGb~ zsrBGBcVz1AF4G!{v=7BkSGjsp~eY|d&yqIpAbe7jTNGXvzwulcima2zdT zF=l3t*=Di?jlbXZ3=)lzz>ZY}Qw7+G6@gE_EqbsFYboP5n5kmz3SI{nU@I+SKQ-o! zF2mfXUr-Q*rs1I3uR)X!PpIQ$s8vwYS%Rq&as9aPcrpFLv;{Vb(%Nwl=GhG32;+sf zH);1l?sepDP{`0wrRGjYP=ja6euNH(Z`!;x80>00XlmkNPbx@D-CA%6;%kr10t;oz z;1jgYlU{Z<6h9i15!E{%?7u1nIFY$NWN=YzetPno6iFB~L`>JYf8<=WBh6XH`>ZoH zcx^eP?5>~c?Cd=%)awbH)T4c?eB+KsXU zU}VYcr=TCp8D`3A$TC)Xx&qF>Q9fzkcV%LwROwG&PH0Tm|6SsFSzin z`TX-rBtKFJt{`F|6;jRA#%3k1TZ+;NMPv3DuLoDC;b8M&Vf3Y0Zh4FZ2i#HEGtc*r zb>wFZVQxs&0LS3Oworqf1$P7c_%721fs4o1oM>M=QelkvS=8r^vR>*Y`I9@8yy24g z*DsLLr{p!p=g3fI?}PIiF|2Q=`kv}v2?50HFhECmdbjmyJJRe17mP@*B$tKfJUq@% z+b)BsSvJhnQN(N%?=Bk#L%|Q7kX~-G$lv!Fu%smo-?&MMpdDjsTa^FTFDrnWa0NOC z@4<~2GK2LG1%>mfV~c=R%v{N3kU6nf)mhD?UW>rxpV=@R`zQ2u>PR zwdRVLU$-_q1IuVPA3=lJ(N#ff4ADDgshFpxGyc^e-fO!%|4va1lU{ z7}!D2isbo|-w%#4yL6G6LGw6afXQ`n@S!Im=;1JC?I?nDCdB{g_xjbs@x2ZwW5B=g zJx;ozeHbOxDMP9G7n|?C{pn7=FDBoe15=8eur+{07F2D9GN*4fg>?O1Wlw zV6r;Z+WgdEBj_S$^P)_gAR2sw0eQ~TJw3}IK_P$XzbSlm-JRnE8r`)g=|SW{exmo!bCD*4ML;U}_#YgoDF`M*3sQf{W&Q?5&fkpT50N%)Q#a*wNu)Wwb|k2>wt|QIW_9ghGAuC&+{Yq zogv)DkJVZ^@-cDIwriydOMhUBOB&d6;5W0|&>#X!lZw8$eFDFEhBWG25Lvd6OBV$e z2#zncAbj*nv29y`RsXZ($hTn)G84r9`^x_w?ElNlr#Rtuhxp=kM-EsCdsrNaU&tGc z&`cIUAP4wEE;wleBfS>@!}$!L<~5r!v+#7VDgg3`CC4vm02N7K1+Pwq1SZkfVOADT z));{9wocbU=3&`aCz@j2zZrR%Ky%6gbIpyY`>G41H@%b;v*jLOx2UeIn7-(&uZhTl zYM>c&V&E-pL!C`Tv2PZlG#g|K&mpaj0jzK3Id8fib0LWC|n zX=W#a=8~TzCj)$i&1aXbM+;cxpoQ;oX^@AwQCrGFH#9uKix=T}; zKY(cX4e4Z6LxKjE^>2@PB?6HF^^sd}@)&tAA@!m`L>F51+0>M5nPTc+UxE{HKMnYZ zbFBZ;0prg|DA8j*bmt|cTHKQb#*oY#gOo=242|aeQ|+rAh4igA^ldiiqy9hBY0#2a_R{*=mHfR znFO7;*Y(RU(vH_H5prSD+cB;grCpc^NM^3u3oOV}>cI3_t1!>1Dnq}}zxsTCdW?wK z(*NmEE?G+d7nHwzYrILi!jV1B=>hfVtD}w!ZEPtatC5}@J*q9CIkgx zl=(gi=)XoufW-eC z?2KpUl>5H0sY_b&OtGaC{TaO%-(jB)ZkW8LsavTwl22 zhc`ce3gt1LW$FY8kr@B_N29x?XuSDdoVFg*J74w-4d?s*Nq~egGCTCbKLZ{ML4p7A zUBg$xSP7w6-EQ}XgDZnxmwTc@UiBSmi}{xdOkTJPSA+iQB5L000w$S zFhl|gW5*qO*0q=-NKCXo{suJt?FeHa+Om<)0r-ULJ1VXJhCUt*dF0FW#p$*a(T7&d zk}3s0Y354@vT#`5UIhJx3y=zYo9TDV90zHtj5RPYj4DyW&JI8Y%D#frUl(pd*W>xG0Qc<&;ow(ht$k)X?H8AragA41ZYsBV`^FEIo}yk)0+5O zje`rxfd3p?XIFO?3lcMd(r}oWh{E3i!!RetqaEEpb4yX|098F;fBUwfLGUt;u7zVN z|6Ijx&f=#_iZ#2WfO;b4Bbb&3{Y;lJH?gjlV(y~j*~(PD9S)!YhNIOo0N{ zd&F3BAN@kRq(pC`9^4OA&FXJ+GnsQD=mL#+y&X&=m~|G<^m}@JYP2j>kd>X-=5}DK z0DXY8qeFh6q&TJqND$J6NwcXU(ecOrR=$;{FWaP^Lt$Xnxw?N17ma{ZW1^{F;~ocT zz+cYOOwUxE-<-f^+JapB@g+jj4BG$zc_(2kQuBefW@^k>pRF3~H*0%#?VyUh)#s&Q zc5fQ!2^MxBvF`@lr;00O8ag$xdh$q3y#5VMN^ph-p|$32yO|1EJ4Y zKa7Ufl`zm288Fu#4gfAokSQdna(P4D62&gi%6Q;-00lgN9rFcwb`a+(tm;Z?R%gr zvjA{Z&}dz*BZG3&*dfxFVYUcK&+S4PRC z9ckhN8dLH=C{R*bA045MDR=I3$?`I1r$c{QNv~)OwMxC7U<1#)J8>*sJ;_Bid>7o8 z*_8UYc71}0>O(#W7^jYbeV2P&&4;yhcNq{p)`u%wtUas09&<^c{tCkg%-DF+`Fi*G zg3OwROjW_MIjFX@`Y-W{V~)GbWhnDmQ`leh@Y2xa!%_yWC^CSe zO}7-k?I&I1DgLsgn3v0=yt<>nj|EDyd+1{^QrLW{)B0dv?F1OU9G#^Wgb_Y5MpVlG zX7lf?_mAvVNCh<*cmG{PzxOV1P5<<}FDjxM!2mR;15#sj1*`YpLan^C+`Su1@9Hj( zw;~mq&MZ|In5|=>xP`BAXm?lv-0!)nhylSItg0!UvXt&97g-nPbklRmTY7PZCd~nu zbm_hJ|B5%wUqRQ}+~caKdAHBj0)+qWGe|S`ghOunaOCh+BRgiJ*(4aJy6|e6lr!!R zt;x<}>dt!WMt1bz`S$p+IcSt+f5^IjqZnKxj@5x&5e^~F+%@>}++RKLX%~9kFtIUu zH{{>{D|4d2`~$$o%`h);9|Fm!kwT6#u*i3zKv&Uag{Pa`Gjqsr+XG zj8fx&q*snCC5>(`KJT5?UlsElsCbNmJV}l{x*XwS$)KE*{G?t@tf|H%nooFjMo(NweKKoi@ z$LhKTyS?J$fqeOnK^(`pHCtJLpnc)g;a4FuVnIYcI?F0nvZ$?~3x}t=%CYc%UBGQa z-ff&7LBT-B@w<+H0m(4-+*(H$#`YGpjA&YrYfFH;}@i`JS2{NAiQ4acRxsnoj)o^kv=M(JPeGHm=;)?hUDxue7 zL0}iAGVR@k7WGH^xoc{4KTFRi0RLp^#iKM>Bt&TA{)z-_B0JF@Cl(Ty=6?ccVs!T( z>KAP7WBYz>iWrs>aQpH`_)j?|9?5fv`@;fuMsXm5^AlfFM1FY>aIa`d4{dX%$b?93 z{_sYKTCJO(!#99dsA-X6zzWVp>rf_*@gXQ%*15ms zTvWDXuJ42_DduPgu)iFpF8E02WeC#nS(8Ep7*AW%sN;9-d&;or&)Qg!NPqE|Pn?j( z^S1mVdg-_aaYx9K0L;`5m0FqqQe=ZB018lG1E1?m*+vle`@|rmZVxSkk3xWv`F{H6p1*SD&9C{f1 zx!oj3t57DO_Q+X!Kj^2>kQIim3jMM|iR5PlARJiwL+|@a)%m;Y<3zw`zPPo!WAig? zmVt)Qd#GodQCSYEdtu}*8M+W0LX)yX_460q&)VF!F2sL99*qZ*BxR-}pY(cwzGGOt z#lRkCe_}g7BX&Z^qXn}Ycv37a8rlf~3zm+eVrlw(%$;9Dy(&%MyyA|XNl=E;&TqGC zxi8|Z6t9!%fVlF7BL)CDUO?XCZ8w;DQtx5&m2b!aHh*ZKjj>(pHV*DWqoiYIu0(cN zHeyO?i%MZoH$%&GkmZ~}38of!-+M-B3kb*6c1YbSf^%LLo7u2)F@M5k)Vg-Et{+FH z6RyjDI7}{wWf6I@=a=OKw4=clt(S^4*E(Xm7&tHJ3=#t>sa0t=EY{p?pMq%venJub z35z>`+HQlLAU;@X{gZ^!_oNflF>W3~RS>C~9)%4DNGq4WB1o(BZTVsMLH zZ&H8nb&I~dRMk7?pX<*r?)PM@@4rE$g=Mpzcx}a^8-#Tf1{{}2x76@OY!vtwrT+;B zgMCBlf=)nqOJCT}S22G}XNVAe{=3Eh-s1d%_%|f{w^0Avi~oh2MV*EJVh|RwBs}N&7&vMybURnVCf`6wczq&|F#fcGF3+CIPh$DH@^0 zGK|?U7Nra5QVcYJtAJ>PNFB~A!QoGlTSwV+j)~l(XwJ}M;&6IISsGG3?!;({0 zBFXwI%LvI+(AS;3xN(E(Qe6-iGj3XLULKZ(GUR@Z)A~65o*hwySrSmy&*qOunCFXM z>-h^^T+sp(TZbqkgL?9Z?}Xen7WEVIE}NRU%EjHkj-92Zeqg zifV+P6T0W-m@jquy@4__6pz`|kw_A0d_kqht_KB@h>eSZ;pXKWLgoDy5BR}wXzsfJisBoC7h-U_p{@-}rN z@>`%3oXddV*vKZxfh~a)a9qo(zd;go)z-lK^aQWRTip<~JwgI&>++%A;rb3RF zG3+FgSJ90RMXi#Skm*-~`xY;2xfW-74(^-H;rgA1r!c4 zHL}(8ivqPOo}Ej+akWsTz`aC@t?k-pjzyJ%GO`uqYOKV9vp|QC9RXQ=6E8N-@OMzn zi+k~DFartK23XwbYTi{)fl^>@)XoLBVdY`(XuUjwoZ9QJC>x2>_g8?4x&NHyE43w; z*Dm_5^_W-x6>b7@Czimn&K?}AD8})-&yL!muc!?R`_h0W=zK^HHZs@E8o;yGzstY8 z-ypL6QZf91e=~@m<%UdC#=RT*XSDqRYKy!gKDns3?4bqe<~3#ZwNO5S#4lp$SXe;$ z_@OAa5vR!q#T1N?UK{N=(+!&pwb?cRb@SZ?(BF9|>&0*hiK|}k_JBAz03Vx>(s=Bq&KB@(wP6bZgn@WQKli|94zD{t>L(~VBzE5v$tWgK z$vbggu`0#N1Vw_c?liJT5MiHXXK}MGuoN-=<^C;?Pyxb;$a0%JIU=^`VRqq*n_07g zXv>^i?EygQZm-8lAMD!&MtbI&)ci)YOn?de&A@Tg;2X%it=AO;KLIv+X~sSSFsaT~ zp3&0 z(_x@;9XiH*My%KLIn?$$0Nph^y-hn%0bn_^R#CpyUHIx@WFwAXG*8~o~spl0>@q(RD&H1$FX5bldb+`w1!!IS3BqXNlxIA(=26`2uljpZKu!Y>V^-fQqhwAl6Z4 zZOVY&0upB=kSa_SwCt^~Q!F`AT0_l9(wmI9*QK4f6>om9&KL@Kn3vCHJXUY5gR_du zdGq$Kv#O5OlRZ1077Zag2Yy=@YS)oF;c5}w;Y9}LQlKWi4qw`WLYSL&r}(UmT!46a^|&g!&^0VL^SZcKUocYelYK z(rw812~un2nkv|L5p?zpsDnSmgM4FAiRSDq%wl~I0lf9X4LjXJs~_g-KZ@yB5HVjk ziv|+c(W1H^D&u1h2lXko9=LRY#az@5W{hR4p2+9mkZ)3&Y9$LWGyuH)wAMjCHyMZ# z&6|P!wvJW5J)&qjcShPGv*<&j|0>@thRn*7HI*4Et}!tkV)I(z^KcU94+;>OmVh9J zCa7j&AM)91CFUK*CwU4o{K2~gn?3xaERtuW)jTC{eT1G3M_2LE#-f`?fZysGA)%u_ zsx9^ug2)uzW>0OC{OIIArHcw?h~@xy6h*4=I_#rinq}gV*$@EE~VvW^C>T%Fok3XUH5`dBfmnt z0Gl!dfV8!(zy-p7?gx4A5e!CeT{I+r7$+*|pKmWDNRxl_c*tI%B_ARp0;ewN4?Lm0 zBfuK~bPi2OrtbSrs2$3!_Dwz`Df7uI-akRz_qfgFnCF|!GrZzN{c5i28{c`G96xuP zMf$p9D_&oZ5>hBl^Qp^VwCkW{h z%@dIM04CtF{C+_|tZoeq3aNgokgCi?ZCtpyfN(-IJYICBb#Q`ST3*(j0sJYRv)1UJ zvmMAUUgB=jIV2$x4X!=rLY7a)7G<>xFts73(t5vQYv)dz6uKB64&TFRqD1Tg$PZ%FxRaxDY1OFPBe1FD< zjs%6q*U>YqZ?+M7wVR*`z;&}oQ$O&a{%MWC(={DKSr$VH{%3tjdWFWO$9Z~B`)W{A zbT@u%6AZ{#fn=Ar;}r*CKkr^3o?_qZ)TNiAo=x2vHG${#`lfvHM*LFe4DLlTy{_1w z7jNmhxSR5W=vDJFE4d?(4S9oMpUi9GUmdqTRWmh|RsB3f?_08C2b}o6Wjb2RI!=@T z8N5vG;;X2Z^hKRwLswWb`{dlVz@V2va2m`wJFga^!D!RO6Lp0++r)+T{ynV1x~Z!MXtIR(I2$%u~9K8!jF$o4iY44)CjnuP6T8QuR^p$7ttRFU~zS79I!h` zo}mN9Btib<)<;iZ@OF)UA;=WH%+U6&SM$z-hO+bS-U$;2P-FyVCQjLOi=`cp)_dt& z-Wc~+377(v23xS7nBOz=FX(^=u~LS;33O0ug0fjDU=mX*uQ?8Hq#6v-G`Kg;`wTY3-MJy@| zm=!-Y9|i?qey{v!fXGoj^1=thjD|X|E!{XJ`0g&FyI|pg=Nn`!rmp_0RQu1jkfmUg z+Y5lL{ac!=tTu&R`R2yJ``Tot^n@5uyvFyM( zLCO&dk#Gad;TV-oFre1Mf@dIfHjAEe98!_c;{u$cg6;ulFS$xw$h)wEz9gbG@b)86 zgih4qmMN-J6&hnKFz#2o$nC;~LiK3SqconZ^J&+@v)zek0x6Y-%-J9sF(=}kfS}2; z&}LMdLgoaN6Dqv-izE+ONPqS(2W9}A>4?M2?)8296+040Y=9MMNwp)1BEIp{XP?o4 zw6J$q(+YVy`*bNxRR>rLuFcL*@Nm4vOE!q%Bx>H5vUK6|9JO&CGDS1 zxjfW|)~@ATlk3tdZ9C@J@9R_dvF>9&6#soml^fgZ;>N1o`&$JBGgHT^QJJM-FZU`_ z=rrAU{yf0CK@{Aqf~NC}*D|X8Yv=Pl5R)FQSnlN2bLT5RNuTLh9H{tO6iuJ~s#DV@ zNqfvT^`LT_&0=S@nJt`DH5|@eoWwuYQM0j`9%`mp@EYMnadOgXq9ayr|KV{b?4_-B%aSuD~g)!CyQ`U975Ozh7$Pm0~uW$g#~Z zIfZCoq0Uf8k$dKZU*c5g-MQczUc zWtQ^w#inC0#e2F1Rnh_UlSH4HlURZXVq4q#Q8NKx;PQ~^Xb@YDf$8f5@Z8WVaUV!_V~ZW-^#Kc62dIV%(Djj?_;*bWqY1>h^o?suZzd0<658hZ|yYl9!M+3+QZaSgRhO|!w zXVtKf3VDqtAxu;XUjc83@~r<_caxTGu%`&A0zfhm zYYSlkzJvh|>7oz7xi^=;?3_3`pS1rR?Bf+Ce5k0l|9SlI!865kc)^JI$9C2>j3)ZV zdJcK6dSuKzIk(F;jAwnfg1w)K{GtRAbFq;X@x%NB2(PMy(duQPl%!*Zb`O)xcQd_qQj3z4iyXb87& zw%A9yv*LQRu&cTZ&E)o`^qO5#Eb9!PWL3;+*TYzPVo%<-9U8(^z5_5;6F^;BGOTU{ zv-K0hV69}VXD#L(NbRc(-If~mfR|rODqC$td<6o74@{TTOcYdy@P>IX0 zu)GRzRHN^m)4AtLwy`KT+4-3!atGVrPrTzaX58361mN%^k=E`>iLQ*wh^2(NT}}2i zV~#6~p6B7Fm^-16>2jQA>7gv!g#Iw|^br*tGo0%^>q9IVQ!giyjO>GIk2lTSnFvI@O0c|@Sb6F#wGkKCVAagaX z74cp~by>ezZA2&nTg%m-i_|o%JVPMcukcD576h9uz7X6N@zMU#9m@{k{nwyXC0jQ&UQ4(_fiCUh2Q7jewh`64zk8 zS!%C973^oNbx~Ix0H)eMBpw)1=6TIku_(6Fw7b^uX!uvelj#fN+!LGiX3be^mOIk#`%tzs!Q z_mt6|D-#KgVtnB`P{rWvkEl7goCQRE`)$XRw9c?vt7+X==p{9yA+0|;YC%Qy0j~J5 zcc?T#;1kzjB%&u%yH_Muna9#9a&>8l*zsBVPV z;x6>g5+>C50jCw+2g2Iee-{<@zQ(tp5RYgQj1lZzMl2N=8TM56Wu1h!fz&8$nCX^{E@DCZyE0`5Tm|39`y~p$`%;@dPy*Qss{Zb|{P&grJy>eO|F-2LW9xX2 z$C>#$49{EuEqPgMnW-JC(VHd>TGWV_uN_ulSrH#aw26+=P8U;&IQKba`H_?4kF;pa zis%56cp+^nZ%r?kBt-HcS$&#v9)lY}n$;Fpf8t}h;3r4gtQ()o+++3zG-ywS5a6cES=2ka5~9``N|LY%3D+Nu)?VGK8va`0ahS7U8XP#M zi=Kd}whMo5a4jaj*s-ke5ZH@eBa)ZOiUoomh2B8w0{+3m@|{J?zViBO|zTB>_&8A)qRmV zqF$|Fmwnb!?yo5nyY8?t^to3A&L$23Q_RL-{Ba-k~U_hgI|2rz{0 z+DD4N09zO)h(@$DMEU;>f4DTEe|36H=%K+CtD*0YerzZu@~tJu+k(nQfh#S7~>`|G>VQnwn1{RFXT3w-PWDMxk=x7qCE@d+FgRww=H* zjeuo@vIaO~fHsS5Y)+fKPXbV5nRMdrqQL=J6)#n@){fhRc>Gph#1dj|NUEOLA}kl5 zQ9Ar^M2>sWU^@QnD?D3y>paVUJ)@VCM!G9=AX#)aRR33i)_(Pdn!6@iAnvk`4klq5 z|AIOD*7`j-C?Vdx|66)VLd6;sVMI0MhKpHXrhN|+ZUp<19J-TGR>9BX%1tV8r{4@h z5#!(79XHK^3=tbP!0)q(d;qg)Haw9wfwNQ$G*#A@?u%S&c!dOF`5$nw$af_|v5AR^ zRp5`?3_5HsFa=)5+W}Sh{WT~q#)h5K`uj6b3Y`z$bC2k_a=FuJ=!=x)Lie&@$Yc}9 z*SlYU>4D^|V&VmnpeFnxM%V2WN zoFe@VrW+qn{{mDSqApIHbRsUHMa#UFsRUi?lE%2Tq*-P-pv_N>tT7~zG|ZBBERzO9 z$zr%s@n#r!Sx04hbLtr#&29n=dN{5{MTs^&j5%oT{*^HSxBBc%^l+_tv18FQP#yDS8<-)hl=cFXz1G z7{~64N%l8S8VnQ4X)fI?Gq$d~o@7IU#P|U0Z;!d7R}%3R4UAQK8d$$L=?JX#>h0szSN3vu`ULKKqVGS`x=Z@&leQ;d z7q;eDQTc3Dj+B?J1+c|(pl#t7Y>+}3LA}oe1wn9P;&LG(SzyWn>gnW!;aApjz+s8g z8IS#QZndEq3Ea8%Szk`7zZTBlVbZs`o1GLX&nYRklh3nW-_NuelsK-t-x3GQCTJxf9$blFd zOCM_xFIuWl#Djx3iOrwcHj)PE&`SUwP3O5I9~j3N&^5nE`z_UHt% zDNrlHI*mN~2Z$=%*!%U}5%{kQH1MSv;~?jfR{a4d33SH)W)apnvXjIId1w9F{gtZ? zl}U)8jPcS+h`$hG8-@u)vtWaj{7?!kJ0{*P4%D(30!DGHC3`RUN##OpmZ9H#>FE)^ zZ5_+$gR?-c+AAEqczc({vRVNH?+-Mb?O^6{_cgjaO4Em{@&k1A1$%;uCrtaqF>TUV<=y*DBHGn}OqaDds)WtW=ZtBBP zs`T24l}y`6Rj{s;k%Xe7kiI=MutM#l8?1JbHhbPQ-NZrPA%St|&R6Vih9;r{r;-oJ zOZf037_p8Z`ubdjE!)9J&jDxG0f6pAYDv%?+*k5~;p;@Y<8+Q=T6L@dEZiea;5wbl zVTi&WKw~_0VplwcQFwdh6KZv?%nvJu-HDSeJRvfSlJT`o2A`sPs4{^Fc75ROvQlnX z!8_L-6D)*EHn1)nwqfc=n^19#k;BwT4)t8-8~ox*_O}A%_wQFs zOBdW>5_ z_Zx)zkb%Tkuaqw~v z5Lt6V-jIjeUg-*$a=wS=U%6e^0~v;Uw;04;KI#>xCeYHsj64rT#sj97HzTuZ$h8mi z0)J79m3=<#nCFnWsO6hn9#!&_9M+;7>EMu5>5%L0BEDM9awFzWB>EgH;+20}3Jt?c zQEwy&G)sw18jX`Gc2l*DQ5F7PDc1HCO<*qZ@j#Q)k}y3yuMbd861x2w4v=8fYa4(1aLF6+iXXaE zgfv@7(C5yGdt8f^L~q*8=kA4m^eTdQXO~G)(x-D=Ssy#Tc(H#dazk6Q47TrQ|lA_@Ce0&dPS8ISJj8%n!x}3>Q zHTk*6d#``5$H^BVI_yY2pCbReTziHfd@!t0?)dL&cRA?itH-jvNd38ffxu6}n#-WD zSI_i(^t+#VoPeD7qR0vB-{!nJ@Iwcl9l!e-myZ*b;YYJ4eZOmKDrLeCXH?{V`!fMV zFY5Q!|4P`va)ayuKb(y8_${*W|L}BVy7z?r+Y};A(qOOQI`oNkzx;h05LM>Xo>+Nk z{`X^~D^n#Y|NA^9k3*B*;pUlD|9~bin+E7D``oDc95Vtg%hL1K>O1k+~U=t&=UHkco!h00Ks@hw2Rs6Q9nHOaW^nta1kR&PLLH zc)0`a4_R_SQTdNc=_R;J&tBgIaSo-pKLDDgReBNVD&Km|9mTJKyBQiV8hcf5JPFcA zF}3G`tGNB-fiHiekXS0;zt|Jm5h}B(%G0L*d@{*v-5ba!nzj0ER58!E(F5SSDthL* zEZcmY6GO81+fV^Cs2!ru5#kvvn(ZlS#*{$CX#b_E*GM6o?Gnq1D-`2#PgQv!RKOLf zDPs9@*IBECp?Oa0>kz`N8pnyQ*==2Xk>yrDZi;WqYsk~9prx_3;L?e&sK4<%mL`ok z3oVb4rU7JA9_0snXcb__dkmo7NlkS^kbde54?_B~O_zyUGYX_ev>UyVA!Gq9H>hVv<8Fn}wQ+c{1 ze&Ayyhc&MgU+8Q&J3ki-r#iS7Y>5KzJBb0nQrnsgBv&Ghap=V7_|wziKR$ROH-0$P zL@w^IBN}c3!;KlmNg8Aw;Q9*$PaXv%BH_A&R`SktEdH_Cp$y6-cRAe9ng?nI9}$B| zFh}Y|38extu|SmAXn{$}8)?&nc@Lv}!1$`6>6NZeRF2W(P$*wJO22-lGBTRNN*L24 zUZ6||DZ0GIn!rv1`Uet;tJs8F6H7j#UNxAFJ{d}#4HfvXRV!um<2(jU6r@}3Bs^6A zd432Qib+k_BM)z0;|>7NfQNzhYKq1tCN7wwp_3ODgaz`*njf$0kYdT4ZrdaBQIV7f z`qz%ma8{c=^1h}V1W<;QV-CA@s}wu@L5$tR;7PsHStB_1s^~EIIG|8f8_T;ZCC7Kk zu5`L~0_Hc}P|m?`)lG*XzeZOyX4ml&cGw8o)M$o{(hg_B<%$kQ4i6z#GIXK}ZSZXR zzkMK&ouN~u}zoffe*-4SQ#EhlX^&uRBK$!U6X`@aBhXC!f|UDimjV0r`wk7Z|%Dh*8NF=d{Ceq6&C?+Mw zURXaN9}nFa`{Or4r$>E!L^JIlzqk)I%$5Cn*yHzzH&$&v5vd(iW7tUZ>a@=uyDxO* z)1$29fWaDrPwi==3J=5r6!+A4cc@021X0&;XBv8+4EWIvP!gaPB+9eIR-FImEFxMg z4>oXm;o%jZ3Gubl`(%h-2N(q%37qf=WK>t%sr@QVl4~QFN-FA3^(GaC*4(=P&@0{A zyQE}DhCwvgH$Y$eh460iH_|A62-0R}hDz5Cp`c{u$)epeknCs`$S?bv{LDz-NPT5v z?wNS`Z8>3l^Iz^rCp0ROG~1UxIUfaRR<1e5_AS^z1un@dH0y#+DL9a9gqCnoIRYG_ zRp-JBp=`*}nH$mRh={LNTKQLnoY9hJZf}d+^q>~Y?8<{g{;YfH3wiE@qFL9{lj4y! z87&8=@+*CdIC{^$kaqWb8zP@V1d=OY53e~v8qxkL{HZSyb zN}&%Lb~d=f%8Wn6z*a@M=JiXJ8fZV81Qd4Ecz;kG0{vuFNr%p-cL%Td8l?b(_)L+t zWaleKt-P@|E5SFzA#+jlM=oan>s#q%osfqdGVxrD5Wmr}x_5(R#91}#gO%!fQ#Mhonv-HnE9aSh&QR*}DeKhE-`HBZU@AjBkzqXe zVjuxeIr7*mUk8F>au3jiTgbNaLGS3edYg@HRBZeVJe1m= z5Xm<4(PnLZ;al>1QX>w`=Mb*|+w<$X);Z6RCrc2Fd?rB+=83q!mmA@nIzsuECa2XF8adwRGYTsK#-ow*6*G~=S^b=Yw>hdy5Z&~OhiL;fJK0aS4FQUnhYl0 z@XLGY8r@PdSKz65qoAqeGzXMn-xEJy5S@37SRk1@WQO)%%=0=$7X?LY{#54Fwt zwXS~L@y*(C%sTm4&0n2Z=p|gY>1&6n01ur;08Kw@J=j-}F%AA`o_QghJ!tJ2`8;|V z$7JzcbeT-{6$*4?+kUnS0KK~{UE$GDX+7m*pDd1-UaD@KZWpoAs-@?*vO2S6exp1F zTu}Jy{m(ykFDngTkE!Djb6Ef$%wyYV|5aYcnN?8#eTcXAMkC$e`1g{%tLMOlVlP-V ztq=9TDz{lhT`WldN*^fs1l+0KN45cSyX?v*Q813>ef(`MN+N=kB`X4FQr1wl=M+Dc z5ikGj&0>_O*JUdQn|^M+k&mNZqOotn4FsjY5ayKNUUkJ(Xa+|!Pt}4C?;8j|ai>Qv ziY${&wJhZeozHK0yHZ7S?!-+#HgY|lhwmk=Hp4O96<4w1|#kkw^BJM9CZVCP2 zeSoVy0Zpqy#Wol+=|8;k@-+o+vJG}+^}c~JLLoIO7`3l@TymlmasFl7Pg9KmWszcb zrxo5g)XnHP{tnT;cAIw40y4@OW7?qL$Hxxyf-xZYdjL2lNiPFnHttPIzOQZVfxv1?b zH?c;`1`M!Sj8rF(F)v(u>9L5aTy*K9Z%pG7T`!+ELyGYdU`H)B$pC3kVH>8zT - + diff --git a/docs/DataViz-protocols_files/figure-html/unnamed-chunk-83-1.png b/docs/DataViz-protocols_files/figure-html/unnamed-chunk-83-1.png index 4d7f19cf2998fbb92dfa464df76853a3e39446ca..753489f0219eb1caa3ea4f1bcbedc4bf72f27f60 100644 GIT binary patch literal 59213 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�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
  • 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%0D;J;R2=Kc$4faK0$34 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 M>)tL@d-(i+07*dSQ2+n{ delta 208575 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%0A9TCn{xer!}WU}mTX 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

    2qV9R*H4-lsG1i2zN1~B; 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 Sz}Fi1(!@n%g!2X8y8j=0jb(TM diff --git a/docs/complete-protocols.html b/docs/complete-protocols.html index 6f40fae..b032516 100644 --- a/docs/complete-protocols.html +++ b/docs/complete-protocols.html @@ -23,7 +23,7 @@ - + @@ -264,7 +264,7 @@

    Chapter 4 Complete protocols

    -

    This chapter showcases several complete protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github, just follow this link. In the same folder you can find the R markdown files for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the R markdown file (and the data) and run it step by step. The R markdown files can also be used as a starting point to apply the same visualization to your own data.

    +

    This chapter showcases several complete protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github in the ‘/data’ folder on this page. The github page holds a separate Rmarkdown file for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the Rmarkdown file (and the data) and run it step by step. The Rmarkdown files can also be used as a starting point to apply the same visualization to your own data.

    An overview of the data visualizations that are generated by the protocols:

    @@ -274,7 +274,7 @@

    4.1 Protocol 1 - Spectra of fluor

    For this data visualization, I selected several spectra from fluorescent proteins at FPbase.org: https://www.fpbase.org/spectra/?s=1746,6551,101,102,123,124,1604,1606&showY=0&showX=1&showGrid=0&areaFill=1&logScale=0&scaleEC=0&scaleQY=0&shareTooltip=1&palette=wavelength

    The data was downloaded in CSV format (by clicking on the button in the lower right corner of the webpage) and renamed to ‘FPbase_Spectra_4FPs.csv’. We read the data from the CSV by using the read_csv() function. This function is part of the tidy verse and loads the data as a tibble. It also guesses type of data for each column. To hide that information, we use show_col_types = FALSE here.

    -
    df_raw <- read_csv("FPbase_Spectra_4FPs.csv", show_col_types = FALSE)
    +
    df_raw <- read_csv("data/FPbase_Spectra_4FPs.csv", show_col_types = FALSE)

    Let’s briefly look at what we have loaded:

    glimpse(df_raw)
    Rows: 512
    @@ -395,7 +395,7 @@ 

    4.2 Protocol 2 - A superplot of c

    We define the confidence level as 95%:

    Confidence_level <-  0.95

    The data is stored in an excel sheet and we read it, skipping the first 6 lines which contain comments:

    -
    df_raw <- readxl::read_excel('figure5.xlsx', skip=6)
    +
    df_raw <- readxl::read_excel('data/figure5.xlsx', skip=6)

    Let’s look at the data:

    head(df_raw)
    # A tibble: 6 × 7
    @@ -516,7 +516,7 @@ 

    4.3 Protocol 3 - small multiples

    Let’s first load the necessary package:

    library(tidyverse)

    The data comes from an excel file:

    -
    df_raw <- readxl::read_excel("Data_Arts_Circularity.xlsx")
    +
    df_raw <- readxl::read_excel("data/Data_Arts_Circularity.xlsx")
     head(df_raw)
    # A tibble: 6 × 13
        time `neutro 1` `neutro 2` `neutro 3` `neutro 4` `neutro 5` `neutro 6`
    @@ -618,7 +618,7 @@ 

    4.4 Protocol 4 - Plotting data fr

    We start by loading a package that we need:

    library(tidyverse)

    The measured data is read from an excel sheet. Note that this is the raw data that is stored by the software that operates the plate reader:

    -
    df_raw <- readxl::read_excel("DualLuc_example_data.xlsx", sheet = "Results")
    +
    df_raw <- readxl::read_excel("data/DualLuc_example_data.xlsx", sheet = "Results")
    New names:
     • `` -> `...1`
     • `` -> `...2`
    @@ -637,7 +637,7 @@ 

    4.4 Protocol 4 - Plotting data fr • `` -> `...16` • `` -> `...17`

    The experimental conditions for each well are stored in a separate CSV file, generated by the experimentalist that did the experiment:

    -
    df_design <- read.csv("Tidy_design.csv")
    +
    df_design <- read.csv("data/Tidy_design.csv")
     head(df_design)
      Wells condition treatment1 treatment2
     1   A01         -        HEK          -
    @@ -847,7 +847,7 @@ 

    4.6 Protocol 6 - Heatmap style vi
    The following object is masked from 'package:purrr':
     
         transpose
    -
    df_S1P <- data.table::fread("ERK_repsonse_to_S1P.csv") 
    +
    df_S1P <- data.table::fread("data/ERK_repsonse_to_S1P.csv") 
     head(df_S1P)
       Time_in_min Ligand Unique_Object CN_ERK Slide
     1:         2.5    S1P           100 0.3941    P1
    @@ -953,7 +953,7 @@ 

    4.7 Protocol 7 - Ridgeline plot

    Load the {tidyverse} package and the data from a CSV file:

    require(tidyverse)
    -df1 <- read.csv("Rac_S1P.csv")
    +df1 <- read.csv("data/Rac_S1P.csv")
     head(df1)
           Time    Cell.1    Cell.2    Cell.3    Cell.4    Cell.5    Cell.6
     1 0.0000000 1.0012160 1.0026460 1.0022090 0.9917870 0.9935569 0.9961453
    @@ -1074,7 +1074,7 @@ 

    4.8 Protocol 8 - Plotting data in

    We start by loading a package that we need:

    library(tidyverse)

    A good example of data wrangling related to 96-wells data is given in protocol 4. Here we start from the tidy data that was the result of data tiyding in the section Data in 96-wells format:

    -
    df_8 <- read.csv("df_tidy_wells.csv")
    +
    df_8 <- read.csv("data/df_tidy_wells.csv")
     head(df_8)
      X column row Well Intensity
     1 1      1   A   A1      2010
    @@ -1150,7 +1150,7 @@ 

    4.9 Protocol 9 - A dose response

    We start by loading the {tidyverse} package:

    library(tidyverse)

    Read the data:

    -
    df_DRC <- read.csv("DRC_Histamine.csv", stringsAsFactors = TRUE)
    +
    df_DRC <- read.csv("data/DRC_Histamine.csv", stringsAsFactors = TRUE)
     head(df_DRC)
      X Unique_Unique_Object  Experiment  Aktnac  ERKnac Condition Concen
     1 1                   12 20200122 P1  0.0558 -0.2106       PTx      0
    @@ -1237,10 +1237,10 @@ 

    4.9 Protocol 9 - A dose response

    To plot the fitted data, we use augment() function that is part of the {broom} package, which we need to load:

    library(broom)
     
    -p + geom_line(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1)
    +p + geom_line(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1)

    Instead of geom_lin() for plotting the fit, we can also use geom_smooth():

    -
    p <- p + geom_smooth(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1)
    +
    p <- p + geom_smooth(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1)
     p
    `geom_smooth()` using method = 'loess' and formula 'y ~ x'

    @@ -1283,7 +1283,7 @@

    4.10 Protocol 10 - Plotting data After clicking on ‘Publish’ a link is generated that can be read as a csv, and any empty cells are converted to NA. Below is the outcommented code that loads the online google sheet. To make sure that this script works even when the google sheet is no longer active and to ensure a reproducible data visualization, I downloaded a snapshot (made on 21st of April, 2022) of the google sheet as a csv file and I’ll load that insetad:

    # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "")
     
    -df_sheet <-  read.csv("20220421_Resultaat-metingen.csv", na.strings = "")
    +df_sheet <-  read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "")
     
     head(df_sheet)
              Tijdstempel Groep
    @@ -1419,7 +1419,7 @@ 

    4.11 Protocol 11 - Plotting time After clicking on ‘Publish’ a link is generated that can be read as a csv. Any empty cells are converted to NA. As explained in protocol 10, we will load a snapshot of the sheet (the code to read the actual sheet is outcommented here):

    # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "")
     
    -df_sheet <-  read.csv("20220421_Resultaat-metingen.csv", na.strings = "")
    +df_sheet <-  read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "")
     head(df_sheet)
              Tijdstempel Groep
     1                <NA>  <NA>
    @@ -1574,7 +1574,7 @@ 

    4.12 Protocol 12 - Plotting group • `` -> `...11`

    Inspection of the dataframe shows that we can remove the first 11 rows and that the name of the columns is in the 12th row. First we fix the column names:

    colnames(df_download) <- df_download %>% slice(12)
    -

    Then, we can remove the first 12 frames and select only the first 3 columns:

    +

    Then, we can remove the first 12 frames and select only the first 3 columns (I use dplyr:: here to make explicit that the select() function is taken from the {dplyr} package. This may not be necessary when you run your own code):

    df_tidy <- df_download %>% slice(-(1:12)) %>% dplyr::select(1:3)
     head(df_tidy)
    # A tibble: 6 × 3
    diff --git a/docs/getting-started.html b/docs/getting-started.html
    index f72b41f..5b79ef9 100644
    --- a/docs/getting-started.html
    +++ b/docs/getting-started.html
    @@ -23,7 +23,7 @@
     
     
     
    -
    +
     
       
       
    diff --git a/docs/index.html b/docs/index.html
    index a2c07e3..ed8e980 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -23,7 +23,7 @@
     
     
     
    -
    +
     
       
       
    @@ -266,7 +266,7 @@ 

    DataViz protocols

    An introduction to data visualization protocols for wet lab scientists

    Joachim Goedhart

    -

    2022-09-22

    +

    2022-10-25

    Preface

    @@ -283,7 +283,11 @@

    Preface

    Cheers to all the kind people that helped me to get started with R, answered my questions, provided feedback on code and data visualizations, and helped me to troubleshoot scripts. Also thanks to all co-workers for sharing data and the helpful discussions. Finally, twitter is a huge source of inspiration, a magnificent playground, and an ideal place to meet people, discuss, get feedback or just hang out and I thank anyone I interact(ed) with! This work work was improved by specific comments from; Daniel C. de la Fuente (@DanCF93)

    +
    +

    How to cite

    +

    Goedhart, J. (2022) DataViz protocols - An introduction to data visualization protocols for wet lab scientists, doi: 10.5281/zenodo.6457003

    +

    diff --git a/docs/plotting-the-data.html b/docs/plotting-the-data.html index e6023eb..243e316 100644 --- a/docs/plotting-the-data.html +++ b/docs/plotting-the-data.html @@ -23,7 +23,7 @@ - + diff --git a/docs/questions-and-answers.html b/docs/questions-and-answers.html index 783e19c..194f896 100644 --- a/docs/questions-and-answers.html +++ b/docs/questions-and-answers.html @@ -23,7 +23,7 @@ - + diff --git a/docs/read-and-reshape.html b/docs/read-and-reshape.html index c77d43a..a879e76 100644 --- a/docs/read-and-reshape.html +++ b/docs/read-and-reshape.html @@ -23,7 +23,7 @@ - + diff --git a/docs/search_index.json b/docs/search_index.json index ebdd749..63a28ba 100644 --- a/docs/search_index.json +++ b/docs/search_index.json @@ -1 +1 @@ -[["index.html", "DataViz protocols An introduction to data visualization protocols for wet lab scientists Preface", " DataViz protocols An introduction to data visualization protocols for wet lab scientists Joachim Goedhart 2022-09-22 Preface Experiments rely on step-by-step instructions that are detailed in protocols. These protocols, which are used in a wet lab, are similar to the instructions that are defined in scripts for data visualization. Although scientists are familiar with protocols for experiments, they are usually less familiar with code or scripts for handling experimental data. Given the similarities between experimental methods and computer instructions, it should be within reach for experimental scientists to add automated, reproducible data processing and visualization to their toolkit. This book aims to lower the barrier for wet lab scientists to use R and ggplot2 for data visualization. First, by explaining some basic principles in data processing and visualization. Second, by providing example protocols, which can be applied to your own data, and I hope that the protocols serve as inspiration and a starting point for new and improved protocols. Data visualization is the process of transforming information into a picture. The picture that reflects the information, helps humans to understand and interpret the data. As such, data visualization is an important step in the analysis of experimental data and it is key for interpretation of results. Moreover, proper data visualization is important for the communication about experiments and research in presentations and publications. Data visualization usually requires refinement of the data, e.g. reshaping or processing. Therefore, the translation of data into a visualization is a multistep process. This process can be automated by defining the steps in a script for a software application. A script is a set of instructions in a language that both humans and computers can understand. Using a script can make data analysis and visualization faster, robust against errors and reproducible. As it becomes easier and cheaper to gather data, it becomes more important to use automated analyses. Finally, scripts make the processing transparent when the scripts are shared or published. R is a very popular programming language for all things related to data. It is freely available, open-source and there is a large community of active users. In addition, it fulfills a need for reproducible, automated data analysis. And lastly, with the ggplot2 extension, it is possible to generate state-of-the-art data visualizations. There are many great resources out there (that is also the reason I came this far) and below I list the specifics of this resource. First, there is a strict focus on R. All examples use R for all steps. Second, the datasets that are used are realistic and represent data that you may have. Several datasets that are used come from actual experimental data gathered in a wet lab. By using real data, specific issues that may not be treated elsewhere are encountered, discussed and solved. One of the reasons is that R requires a specific data format (detailed in chapter 2 Reading and Reshaping data) before the data can be visualized. It is key to understand how experimental data should be processed and prepared in a way that it can be analyzed and visualized. As the required format is usually unfamiliar to wet lab scientists, I provide several examples of how to do this. Third, since details determine successful use of R, I will go into detail whenever necessary. Examples of details include the use of spaces in column names, reading files with missing values, or optimizing the position of a label in a data visualization. Finally, modern analysis and visualization methods are treated and since the book is in a digital, online format it will be adjusted when new methods are introduced. An example of a recently introduced data visualization is the Superplot, which is the result of Protocol 2. Part of this work has been published as blogs on The Node and the enthusiastic response encouraged me to create a more structured and complete resource. This does not at all imply that this document needs to be read in a structured manner. If you are totally new to R it makes sense to first read the chapter Getting started with R which treats some of the essential basics. On the other hand, if you are familiar with R, you may be interested in the chapters on Reading and Reshaping data or Visualizing data. Finally, masters in R/ggplot2 may jump right to the Complete protocols. This final part brings all the ingredients of the preceding chapters together. Each protocol starts with raw data and shows all the steps that lead to a publication quality plot. I hope that you’ll find this book useful and that it may provide a solid foundation for anyone that wants to use R for the analysis and visualization of scientific data that comes from a wetlab. I look forward to seeing the results on twitter (feel free to mention me: @joachimgoedhart), in meetings, in preprints or in peer reviewed publications. A toast Cheers to all the kind people that helped me to get started with R, answered my questions, provided feedback on code and data visualizations, and helped me to troubleshoot scripts. Also thanks to all co-workers for sharing data and the helpful discussions. Finally, twitter is a huge source of inspiration, a magnificent playground, and an ideal place to meet people, discuss, get feedback or just hang out and I thank anyone I interact(ed) with! This work work was improved by specific comments from; Daniel C. de la Fuente (@DanCF93) "],["getting-started.html", "Chapter 1 Getting started with R 1.1 Running R 1.2 Using the command line 1.3 ?Help 1.4 Installing packages 1.5 Multiline code", " Chapter 1 Getting started with R There is a lot of great material out there to get you started with R. I enjoyed swirl, which teaches basic R, in R. Whatever you choose, it is probably a good idea to familiarize yourself to some extent with basic R. Below, I only treat some of the basic stuff that is needed to run the code that is presented in the other chapters. 1.1 Running R R is free and it is available for many different platforms. You can run plain R, run it from RStudio Desktop or even from a browser. I prefer Rstudio and the instructions are based on Rstudio as well. When you start Rstudio, you see a couple of windows, including a ‘Console’. This is the place where you can type your commands for R. 1.2 Using the command line A classic in coding language is to print ‘hello world’. To do this, you need to type this piece of code (followed by the enter key) in the console: print('hello world') The result, printed below the code in the console is: [1] \"hello world\" In this document the input and output is shown as grey boxes. The first grey box represents the input and, if there is any output, the second grey box shows the output, for example: print('hello world') [1] "hello world" It is possible to copy the code from the first box. When you move your cursor to the upper left corner of the box a copy icon will appear. If you click on the icon, the code is copied. Not every piece of code results in a visible output, for instance when I assign a value to the variable x: x <- 1 To show the value of a variable as output, type its name: x [1] 1 R comes with datasets. Although these datasets are not so relevant for us, they are often used to demonstrate functions in R. One of these datasets is mtcars and we can use the head() function to check the first lines: head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 1.3 ?Help If you need help with a specific function, you may look at the documentation by typing a question mark followed by the function: ?head() However, I usually find myself googling instead of reading the documentation. The result is often a website where the correct use is explained by an example. It also make sense to experiment. Systematically changing variables or options (or outcommenting lines of code, see below) will teach you the logic behind a function or operation. Finally, there may be some answers in the chapter Questions and Answers 1.4 Installing packages R comes with a lot of commands and functions, but we often need to load additional ‘packages’ to add functionality. The most important one that we use here is the {ggplot2} package that we use for the data visualizations. The package can be activated with the function require() or library(): library("ggplot2") The {tidyverse} package is very versatile and is a superpackage that hold several packages (including {ggplot2}). Loading the {tidyverse} package is like equipping R with superpowers. Often it is sufficient to load the {tidyverse} package. The first time, the package has to be downloaded and installed. This handy piece of code checks whether the {tidyverse} package is available, downloads it if necessary and than activates it: if (!require(tidyverse)) { install.packages("tidyverse") require(tidyverse) } The output in the console depends on the packages that are installed and activated. For some specific functions, other packages are required, and these will be mentioned whenever they are used. 1.5 Multiline code The tidyverse package introduces a so-called pipe operator %>% which we will use a lot. This operator is useful for stringing multiple functions together. An example is given below, which reads as ‘take the mtcars dataset and next use the head() function’. mtcars %>% head() mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 Also for the plots that are generated with ggplot(), several functions can be added and these reflects different layers in the plot. However, in case of ggplot the layers are combined by a +: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() It is important to end each line with a +, as it indicates that the code continues on the next line. This will result in a warning message: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() The last line should not end with a plus. A trick that I use a lot, is using NULL on the last line of the code: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() + NULL The advantage is that it is easy to deactivate a line by placing a hashtag in front of it (without the need to remove the +). The hashtag tells R to treat that line as a comment and not as code: ggplot(mtcars, aes(wt, mpg)) + geom_point() + # geom_line() + NULL This strategy is called ‘commenting out’ and is very useful to examine the effect of a line of code. For plots, it works very well in combination with NULL on the last line. "],["read-and-reshape.html", "Chapter 2 Reading and reshaping data 2.1 Introduction 2.2 Types of data 2.3 Reading data 2.4 Reshaping data", " Chapter 2 Reading and reshaping data 2.1 Introduction Experimental data can be recorded and stored in different ways. Anything that is not digital (e.g. notes in an physical labbook) has to be converted, before it can be used in a computer. Nowadays, most information is already in a digital format and stored in a file. This can be a text file, an excel file, or a file generated by a piece of equipment. In R, the main structure for storing and processing data is a ‘dataframe’ (a modernized version of the dataframe is a ‘tibble’, which is available when the tidyverse package is used). The dataset mtcars that comes with R is a dataframe. We can check the type of a structure or variable by using the function class(). This is a very helpful function to learn about the class of an object: class(mtcars) [1] "data.frame" The dataframe itself can be printed by just typing its name. To look only at the first rows we can use the function head(): head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 When we read experimental data from a file, this implies that we transfer the information to a dataframe in R. A dataframe can hold several types of data. Let’s first look at what different types of data you may encounter. 2.2 Types of data All the information that is recorded during an experiment can be considered as data. Details of the experimental approach or setup are called metadata, and the data that is measured is the raw data. Data visualization primarily deals with the raw, measured data. Yet, adding data on the experimental design or other types of metadata can be important for the interpretation of the data. The raw data mostly consist of numbers, but these are often accompanied by labels for experimental conditions or to identify objects. All this information is data, but they are clearly of different types. Let’s have a look at the most common types of data. Measurements usually result in quantitative data consisting of numbers. For instance when an optical density is measured with a spectrophotometer or when temperature is determined with a thermometer. This kind of data is called quantitative and continuous data, since it can have any number ranging from minus to plus infinity. Another type of quantitive data is quantitative and discrete data and it consists only of natural numbers. An example is the number of colonies on an agar plate or the number of replicates. There is also data that cannot be expressed in numbers and we call that qualitative data. For instance different experimental categories, e.g. ‘control’ and ‘treated’. This is also known as nominal data (ordinal data is not treated as it is not used in this book). It is important to make the distinction between different types of data and tell R how to treat the data. In some cases a number stored in a file can be a category and it is important to treat the number as a category and not as quantitative data. We will see that R stores information about the type of data in the example below. The variable x to which we assigned a value of 1 is: x <- 1 class(x) [1] "numeric" We can convert this to a ‘factor’, which means that it is no longer a number but qualitative data: x <- as.factor(x) class(x) [1] "factor" And therefore, this will give an error: x + 1 [1] NA When we convert it back to a number, it works: as.numeric(x) + 1 [1] 2 This simple example illustrates the difference between quantitative and qualitative data and it shows that we can change the data type in R. 2.3 Reading data Reading, or loading data is the transfer of information from a file to the memory of R where it is stored as a dataframe. Rstudio supports ‘point-and-click’ loading of data from its menu (File > Import Dataset > …). This is a convenient way of loading data. Since the aim is to perform all steps in a script, including data loading, I’ll explain how functions are used to load data from the console. 2.3.1 Loading data from a text or csv file Before we can read the file, we need to make sure that we can locate the file. In RStudio you can select the directory (folder) from the menu: Session > Set Working Directory > Choose Directory… If you are running an R script and the data is in the same directory as the script, you can go to the menu of Rstudio and select: Session > Set Working Directory > To Source File Location When the directory is properly set, you can read the file. A common file format is the ‘comma separated values’ or CSV format. Here we load a CSV file that was obtained from fpbase.org and contains the excitation and emission data of Green Fluorescent Protein. This file and all other example data are available at github: https://github.com/JoachimGoedhart/DataViz-protocols The function read_csv() is used to read the file and the data is assigned to a dataframe called ‘df’: df <- read.csv('FPbase_Spectra.csv') To check whether the loading was successful, we can look at the first lines of the dataframe with the function head(): head(df) Wavelength mEGFP.EM mEGFP.EX 1 300 NA 0.0962 2 301 NA 0.0872 3 302 NA 0.0801 4 303 NA 0.0739 5 304 NA 0.0675 6 305 NA 0.0612 This data has several columns, each containing quantitative data. Empty cells that do not have any data will be displayed as ‘NA’. Note that this is different from ‘0’. The ‘delimiter’ of a file is a character that separates the different fields of data. In a CSV file, as the name implies, this is a comma. However, other characters such as semicolons or tabs are often used as delimiters in text files. The function ‘read.delim()’ can be used to load a text file with a delimiter that can be specified, and therefore this function is more flexible for loading of data. For the CSV file, it would be used like this: df <- read.delim('FPbase_Spectra.csv', sep = ",") 2.3.2 Loading data from a URL When the CSV file is available online, e.g. in a data repository or on Github, it can be loaded by providng the URL: df <- read.csv('https://zenodo.org/record/2545922/files/FRET-efficiency_mTq2.csv') head(df) EGFP mNeonG Clover mKOkappa mOrange2 mScarlet.I mRuby2 TagRFP.T 1 46.25865 61.27913 52.85122 47.28077 25.70513 36.03078 51.68192 12.39361 2 46.48604 60.97392 54.05560 48.42123 26.43752 34.93961 33.75286 12.59682 3 46.66348 61.27877 48.93475 44.93190 24.47023 25.38569 41.93491 14.03628 4 46.30399 60.80149 48.95284 45.47728 21.72633 28.27172 33.68123 12.59829 5 45.67780 59.89690 52.97067 44.03166 21.52321 34.00304 35.81131 20.86654 6 45.35124 62.76465 52.57957 47.08019 23.44953 34.64273 48.87000 23.78392 mCherry 1 31.31533 2 30.85531 3 30.66732 4 34.28993 5 35.64215 6 28.99762 2.3.3 Retrieving data from Excel Suppose we have an excel file with multiple tabs and we would like to access the data for mNeonGreen. To import the correct data into a dataframe use: df <- readxl::read_excel('FPbase_Spectra.xlsx', sheet = 'mNeonGreen') head(df) # A tibble: 6 × 3 Wavelength `mNeonGreen EM` `mNeonGreen EX` <dbl> <dbl> <dbl> 1 300 NA NA 2 301 NA NA 3 302 NA NA 4 303 NA NA 5 304 NA NA 6 305 NA NA Again, ‘NA’ indicates that no data is available. Since the read_excel() is a funtion from the ‘tidyverse’ the data is stored in a tibble. This can be converted to an ordinary dataframe: df <- as.data.frame(df) class(df) [1] "data.frame" Now that we have the data loaded, we can generate a plot. For simplicity I use the qplot() function. The more flexible ggplot() function will be introduced later. We need to supply the name of the dataframe, the column for the x-axis data and the column that is used for the y-axis. Note that two of the column names have a space and to properly indicate the name of the column we need to enclose the name with backtics (`). qplot(data=df,x=Wavelength, y=`mNeonGreen EX`) A plot with lines instead of dots can be made by supplying this alternative ‘geometry’: qplot(data=df,x=Wavelength, y=`mNeonGreen EX`, geom='line') The plots show the excitation spectrum of mNeonGreen, and it can be inferred that the protein is maximally excited near 500 nm. In its current shape, the dataframe is not suitable for simultaneously plotting the excitation and emission spectrum. To do that, we need to reshape the data and this will be the topic of the Reshaping data section. 2.3.4 Retrieving data from multiple files When the data is spread over multiple files, it is useful to read these files and combine them into one dataframe. In this example we have the data from three different conditions, each is an individual CSV file. First we create a list with the files based on a pattern. In this case the relevant files contain the string S1P.csv: filelist = list.files(pattern="*S1P.csv") filelist [1] "Cdc42_S1P.csv" "Rac_S1P.csv" "Rho_S1P.csv" Then we use the function map() to perform the function read.csv() for each of the files and we store the result in a new dataframe ‘df_input_list’. df_input_list <- map(filelist, read.csv) The result is a ‘nested’ dataframe, which is a dataframe with dataframes. Instead of having three separate dataframes, we want a single dataframe but it should have a label that reflects the condition. The labels are based on the filenames. We can use str_replace() to remove the extension of the filenames: names(df_input_list) <- str_replace(filelist, pattern = ".csv", replacement = "") After this, we merge the dataframes and create a column ‘id’ that has the label with the filename: df <- bind_rows(df_input_list, .id = "id") head(df) id Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 1 Cdc42_S1P 0.0000000 1.0035170 1.0015490 0.9810209 0.9869040 1.0041990 2 Cdc42_S1P 0.1666667 0.9991689 0.9961631 0.9801265 0.9891608 0.9989283 3 Cdc42_S1P 0.3333333 1.0013450 1.0046440 1.0106020 1.0124910 0.9953477 4 Cdc42_S1P 0.5000000 1.0015790 1.0043180 1.0106890 1.0066810 1.0027020 5 Cdc42_S1P 0.6666667 0.9943522 0.9933341 1.0168220 1.0045540 0.9988462 6 Cdc42_S1P 0.8333333 1.0046240 1.0071780 1.0140210 1.0042580 0.9920673 Cell.6 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 1 1.0049370 1.0042000 1.0014210 1.0001080 1.000748 1.0015060 1.0057850 2 0.9892894 0.9903881 0.9975485 0.9937496 0.995352 0.9962637 0.9972004 3 1.0104820 1.0140110 1.0016740 1.0003500 1.003132 1.0015520 0.9942397 4 1.0031760 1.0016000 1.0000720 1.0035080 1.000595 1.0017760 1.0035220 5 0.9921757 0.9898673 0.9993021 1.0023010 1.000192 0.9989264 0.9993660 6 1.0081460 1.0075700 0.9985681 1.0013800 1.001741 0.9989417 1.0028090 Cell.13 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 1.0111880 1.0147230 1.0089390 1.0032410 1.0068720 1.0019290 1.0008660 NA 2 0.9894263 1.0044960 1.0026040 0.9978889 0.9970717 0.9993551 0.9980562 NA 3 0.9921575 1.0073610 1.0029890 1.0009640 0.9984493 0.9968905 0.9966830 NA 4 1.0102150 0.9910634 0.9943020 0.9942904 0.9932356 1.0059050 1.0043110 NA 5 0.9974161 0.9829283 0.9912844 1.0037130 1.0045560 0.9959676 1.0000940 NA 6 1.0070350 0.9790479 0.9861535 1.0059600 1.0065300 1.0070570 1.0049470 NA Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 Cell.28 Cell.29 1 NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA NA NA NA NA Cell.30 Cell.31 Cell.32 1 NA NA NA 2 NA NA NA 3 NA NA NA 4 NA NA NA 5 NA NA NA 6 NA NA NA This dataframe contains all the relevant information, but it is not tidy yet. We’ll discuss how to convert this dataframe into a tidy format. We can save this dataframe for later: df %>% write.csv('df_S1P_combined.csv', row.names=FALSE) 2.4 Reshaping data Data is often recorded in tables or spreadsheets. Columns are typically used for different conditions (indicated in a header) and each data cell contains a measured value. Although this format makes perfect sense for humans, it is less suitable for analysis and visualization in R. Instead of the tabular, or wide, format, the functions from the tidyverse package work with data in a ‘tidy’ format. The benefit of tidy data is that it is a consistent way to structure datasets, facilitating data manipulation and visualization Wickham, 2014. In other words, this format simplifies downstream processing and visualization. In this section, I will show how data can be converted from spreadsheet format to a long, tidy format. This step is needed to prepare the data for visualization with ggplot() which is also part of the tidyverse package. I will use the nomenclature that is used in the original publication by Hadley Wickham. Before we start, a quick warning that I have been struggling with the concept of tidy data. Probably, because I was very much used to collect, process and summarize data in spreadsheets. In addition, I am used to read and present data in a tabular format. It is important to realize that data in the tidy format contains exactly the same information as non-tidy, spreadsheet data, but it is structured in a different way. In fact we can switch back and forth between the two formats with functions that are provided by R. 2.4.1 Quantitative data, discrete conditions Let’s say that you have measured cell sizes under a number of different experimental conditions and this is stored in an excel spreadsheet. Let’s load the data: df <- readxl::read_excel('Length-wide.xls') df # A tibble: 10 × 5 `Condition 1` `Condition 2` `Condition 3` `Condition 4` `Condition 5` <dbl> <dbl> <dbl> <dbl> <dbl> 1 14.4 19.2 16.6 21.9 18.7 2 16.2 13.7 13.9 20.2 13.2 3 11.2 13.2 13.2 22.7 18.1 4 15.2 20.1 13.7 19 18.2 5 11.7 21.3 15.9 19.5 15.9 6 17.5 19.9 13 14.3 28.7 7 17 20.8 10.8 14 29.6 8 18.7 18.4 14.9 17.5 13.3 9 19.1 20.7 14.6 16.5 13.9 10 10.7 19.2 14.2 17.8 13.4 First, we will replace the spaces in the column names. Although this is not strictly necessary, it simplifies handling of the data. We use names() to get the names of the dataframe and str_replace() to replace the space by an underscore: names(df) <- str_replace(names(df), pattern = " ", replacement = "_") head(df) # A tibble: 6 × 5 Condition_1 Condition_2 Condition_3 Condition_4 Condition_5 <dbl> <dbl> <dbl> <dbl> <dbl> 1 14.4 19.2 16.6 21.9 18.7 2 16.2 13.7 13.9 20.2 13.2 3 11.2 13.2 13.2 22.7 18.1 4 15.2 20.1 13.7 19 18.2 5 11.7 21.3 15.9 19.5 15.9 6 17.5 19.9 13 14.3 28.7 Now that the column names are fixed, we can restructure the data. The aim is to create a dataframe with one column that specifies the conditions and one column with all the measured values. There is a long history of packages and functions that can be used for restructuring (gather(), melt()). Here we use the most modern function pivot_longer() from the tidyverse package. We need to specify the dataframe, which columns to restructure (specified by everything() here) and the names of the new columns. The current column names will be transferred to a column that is named “condition” and all values will be transferred to a column named “size”. df_tidy <- pivot_longer(df, cols = everything(), names_to = "Condition", values_to = "Size") head(df_tidy) # A tibble: 6 × 2 Condition Size <chr> <dbl> 1 Condition_1 14.4 2 Condition_2 19.2 3 Condition_3 16.6 4 Condition_4 21.9 5 Condition_5 18.7 6 Condition_1 16.2 The benefit of this format is that is is now clear what the numbers are. The most important requirement for tidy data is that each variable occupies only a single column and that each row is an observation. Let’s save the data in a csv file: df_tidy %>% write.csv('Length-tidy.csv') 2.4.2 Multiple discrete conditions Here, we deal with a more complex spreadsheet that holds data of multiple replicates and two experimental conditions. Note that the data from multiple conditions can be stored in different ways and here we only treat one way. Especially for these kind of datasets, the tidy format is a better, cleaner structure. We will load the data from a repository: df_multiheader <- read.csv('https://zenodo.org/record/4056966/files/Data-with-replicates.csv') head(df_multiheader) Control Control.1 Control.2 Drug Drug.1 Drug.2 1 Replicate1 Replicate2 Replicate3 Replicate1 Replicate2 Replicate3 2 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 3 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 4 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 5 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 6 41.54301 42.66665 26.92205 30.25243 22.90337 21.93457 The first row lists the experimental condition and the second row identifies biological replicates. Now, when this is loaded as an ordinary CSV, the first row is the header, but the second row is treated as data. Let’s load the data without flagging a header. We also add the stringsAsFactors = FALSE to make sure that the data is loaded as characters <chr> and not as factors <fctr>. The difference is not obvious, but we run into problems later when we want to convert all the values into actual numbers (which we will do this at the very last step): df_multiheader <- read.csv("https://zenodo.org/record/4056966/files/Data-with-replicates.csv", header = FALSE, stringsAsFactors = FALSE) head(df_multiheader) V1 V2 V3 V4 V5 V6 1 Control Control Control Drug Drug Drug 2 Replicate1 Replicate2 Replicate3 Replicate1 Replicate2 Replicate3 3 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 4 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 5 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 6 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 We’ll load the first row as a vector that contains the name of each column. To this end we select the first row of the dataframe with the brackets [1,]. The result is a dataframe and to turn this into a vector with strings we use unlist(): first_row <- df_multiheader[1,] %>% unlist(use.names=FALSE) first_row [1] "Control" "Control" "Control" "Drug" "Drug" "Drug" We repeat this for the second row: second_row <- df_multiheader[2,] %>% unlist(use.names=FALSE) second_row [1] "Replicate1" "Replicate2" "Replicate3" "Replicate1" "Replicate2" [6] "Replicate3" Next, row 1 and row 2 are removed from the dataframe, keeping only the data: df <- df_multiheader[-c(1:2),] head(df) V1 V2 V3 V4 V5 V6 3 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 4 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 5 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 6 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 7 41.54301 42.66665 26.92205 30.25243 22.90337 21.93457 8 44.04201 37.10115 18.24681 35.93469 20.10045 22.86391 The labels of the conditions and replicates are combined by pasting them together with an underscore to separate the labes. The result is a single vector with unique labels: combined_labels <- paste(first_row, second_row, sep="_") combined_labels [1] "Control_Replicate1" "Control_Replicate2" "Control_Replicate3" [4] "Drug_Replicate1" "Drug_Replicate2" "Drug_Replicate3" Now, we can add these labels as column names to the dataframe: colnames(df) <- combined_labels head(df) Control_Replicate1 Control_Replicate2 Control_Replicate3 Drug_Replicate1 3 43.69202 35.43517 27.69333 35.3156 4 41.85664 38.17644 35.61621 34.81943 5 49.11707 39.86308 27.20247 30.45615 6 49.79331 37.5157 39.98903 37.46084 7 41.54301 42.66665 26.92205 30.25243 8 44.04201 37.10115 18.24681 35.93469 Drug_Replicate2 Drug_Replicate3 3 20.54166 16.13286 4 20.43263 16.47575 5 29.8097 16.49928 6 25.94712 18.48844 7 22.90337 21.93457 8 20.10045 22.86391 To convert this dataframe into a tidy format we use the pivot_longer() function, exactly like we did in the previous example: df_tidy <- pivot_longer(df, cols = everything(), names_to = "combined_labels", values_to = "Size") head(df_tidy) # A tibble: 6 × 2 combined_labels Size <chr> <chr> 1 Control_Replicate1 43.69202 2 Control_Replicate2 35.43517 3 Control_Replicate3 27.69333 4 Drug_Replicate1 35.3156 5 Drug_Replicate2 20.54166 6 Drug_Replicate3 16.13286 The dataframe is tidy now, but we need to split the conditions from the replicates in the first column with combined labels: df_tidy <- df_tidy %>% separate(combined_labels, c('Treatment', 'Replicate')) head(df_tidy) # A tibble: 6 × 3 Treatment Replicate Size <chr> <chr> <chr> 1 Control Replicate1 43.69202 2 Control Replicate2 35.43517 3 Control Replicate3 27.69333 4 Drug Replicate1 35.3156 5 Drug Replicate2 20.54166 6 Drug Replicate3 16.13286 There is still one problem that we need to fix. The values in de the column ‘Size’ are characters <chr>, which means these are strings. Let’s convert the strings to actual numbers: df_tidy %>% mutate(Size = as.numeric(Size)) # A tibble: 300 × 3 Treatment Replicate Size <chr> <chr> <dbl> 1 Control Replicate1 43.7 2 Control Replicate2 35.4 3 Control Replicate3 27.7 4 Drug Replicate1 35.3 5 Drug Replicate2 20.5 6 Drug Replicate3 16.1 7 Control Replicate1 41.9 8 Control Replicate2 38.2 9 Control Replicate3 35.6 10 Drug Replicate1 34.8 # … with 290 more rows This kind of data, acquired at different conditions with different replicas is ideally suited for a SuperPlot (Lord et al., 2000). An example of this kind of data visualization is Protocol 2 2.4.3 Double quantitative data An example of quantitative continuous data for two variables is when measurements are performed at different concentrations, times or wavelengths. The latter example we have encountered before when spectral data was loaded. Let’s look again at that data and convert it to tidy format. df <- readxl::read_excel('FPbase_Spectra.xlsx', sheet = 'mNeonGreen') head(df) # A tibble: 6 × 3 Wavelength `mNeonGreen EM` `mNeonGreen EX` <dbl> <dbl> <dbl> 1 300 NA NA 2 301 NA NA 3 302 NA NA 4 303 NA NA 5 304 NA NA 6 305 NA NA Both the Emission (EM) and excitation (EX) data are acquired as a function of wavelength. To convert this data to tidy format, we need to keep a column with wavelength data and we need another column with the spectral data. To achieve this, we will modify the mNeonGreen data and keep the Wavelength data as a column: df_tidy <- pivot_longer(df, cols = -Wavelength, names_to = "sample", values_to = "intensity") head(df_tidy) # A tibble: 6 × 3 Wavelength sample intensity <dbl> <chr> <dbl> 1 300 mNeonGreen EM NA 2 300 mNeonGreen EX NA 3 301 mNeonGreen EM NA 4 301 mNeonGreen EX NA 5 302 mNeonGreen EM NA 6 302 mNeonGreen EX NA We can now plot the two spectra, which was not possible before the conversion: qplot(data=df_tidy,x=Wavelength, y=intensity, color=sample, geom='line') A more elaborate example of plotting spectra is given in Protocol 1 2.4.4 Data from multiple files In an earlier example, we have combined the data from multiple files into a single dataframe. Let’s first load it: df <- read.csv('df_S1P_combined.csv') head(df) id Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 1 Cdc42_S1P 0.0000000 1.0035170 1.0015490 0.9810209 0.9869040 1.0041990 2 Cdc42_S1P 0.1666667 0.9991689 0.9961631 0.9801265 0.9891608 0.9989283 3 Cdc42_S1P 0.3333333 1.0013450 1.0046440 1.0106020 1.0124910 0.9953477 4 Cdc42_S1P 0.5000000 1.0015790 1.0043180 1.0106890 1.0066810 1.0027020 5 Cdc42_S1P 0.6666667 0.9943522 0.9933341 1.0168220 1.0045540 0.9988462 6 Cdc42_S1P 0.8333333 1.0046240 1.0071780 1.0140210 1.0042580 0.9920673 Cell.6 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 1 1.0049370 1.0042000 1.0014210 1.0001080 1.000748 1.0015060 1.0057850 2 0.9892894 0.9903881 0.9975485 0.9937496 0.995352 0.9962637 0.9972004 3 1.0104820 1.0140110 1.0016740 1.0003500 1.003132 1.0015520 0.9942397 4 1.0031760 1.0016000 1.0000720 1.0035080 1.000595 1.0017760 1.0035220 5 0.9921757 0.9898673 0.9993021 1.0023010 1.000192 0.9989264 0.9993660 6 1.0081460 1.0075700 0.9985681 1.0013800 1.001741 0.9989417 1.0028090 Cell.13 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 1.0111880 1.0147230 1.0089390 1.0032410 1.0068720 1.0019290 1.0008660 NA 2 0.9894263 1.0044960 1.0026040 0.9978889 0.9970717 0.9993551 0.9980562 NA 3 0.9921575 1.0073610 1.0029890 1.0009640 0.9984493 0.9968905 0.9966830 NA 4 1.0102150 0.9910634 0.9943020 0.9942904 0.9932356 1.0059050 1.0043110 NA 5 0.9974161 0.9829283 0.9912844 1.0037130 1.0045560 0.9959676 1.0000940 NA 6 1.0070350 0.9790479 0.9861535 1.0059600 1.0065300 1.0070570 1.0049470 NA Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 Cell.28 Cell.29 1 NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA NA NA NA NA Cell.30 Cell.31 Cell.32 1 NA NA NA 2 NA NA NA 3 NA NA NA 4 NA NA NA 5 NA NA NA 6 NA NA NA The data is still in a wide format and all the data that is in a column that starts with ‘Cell’ needs to be combined into a single column. The other columns id and Time need to be excluded from this operation and this is achieved with using the - sign: df_tidy <- pivot_longer(df, cols = -c(id, Time), names_to = "object", values_to = "activity") head(df_tidy) # A tibble: 6 × 4 id Time object activity <chr> <dbl> <chr> <dbl> 1 Cdc42_S1P 0 Cell.1 1.00 2 Cdc42_S1P 0 Cell.2 1.00 3 Cdc42_S1P 0 Cell.3 0.981 4 Cdc42_S1P 0 Cell.4 0.987 5 Cdc42_S1P 0 Cell.5 1.00 6 Cdc42_S1P 0 Cell.6 1.00 If desired, the column ‘id’ can be renamed and/or split: df_tidy <- df_tidy %>% separate(id, c('Condition', 'Treatment')) head(df_tidy) # A tibble: 6 × 5 Condition Treatment Time object activity <chr> <chr> <dbl> <chr> <dbl> 1 Cdc42 S1P 0 Cell.1 1.00 2 Cdc42 S1P 0 Cell.2 1.00 3 Cdc42 S1P 0 Cell.3 0.981 4 Cdc42 S1P 0 Cell.4 0.987 5 Cdc42 S1P 0 Cell.5 1.00 6 Cdc42 S1P 0 Cell.6 1.00 This dataframe is perfectly tidy, but there’s one little improvement that improves the sorting of the objects. The number of cells runs from 1 to 32. When it is sorted, Cell.1 will be followed by Cell.10: sort(unique(df_tidy$object)) [1] "Cell.1" "Cell.10" "Cell.11" "Cell.12" "Cell.13" "Cell.14" "Cell.15" [8] "Cell.16" "Cell.17" "Cell.18" "Cell.19" "Cell.2" "Cell.20" "Cell.21" [15] "Cell.22" "Cell.23" "Cell.24" "Cell.25" "Cell.26" "Cell.27" "Cell.28" [22] "Cell.29" "Cell.3" "Cell.30" "Cell.31" "Cell.32" "Cell.4" "Cell.5" [29] "Cell.6" "Cell.7" "Cell.8" "Cell.9" To correct this, we need a 0 preceding the single digit numbers, e.g. Cell.01. To do that, we first split the object column into two columns, using the dot as a separator: df_tidy <- df_tidy %>% separate("object", c("object", "number"), sep="\\\\.") Then, we fill up all the number to two digits by adding a 0 in front of all the single digit numbers with the function str_pad(): df_tidy <- df_tidy %>% mutate(number=str_pad(number, 2, pad = "0")) We can merge the two columns back together and I changed the seperator to a space: df_tidy <- df_tidy %>% unite("object", c("object", "number"), sep=" ") head(df_tidy) # A tibble: 6 × 5 Condition Treatment Time object activity <chr> <chr> <dbl> <chr> <dbl> 1 Cdc42 S1P 0 Cell 01 1.00 2 Cdc42 S1P 0 Cell 02 1.00 3 Cdc42 S1P 0 Cell 03 0.981 4 Cdc42 S1P 0 Cell 04 0.987 5 Cdc42 S1P 0 Cell 05 1.00 6 Cdc42 S1P 0 Cell 06 1.00 When the sorting is repeated it looks better: sort(unique(df_tidy$object)) [1] "Cell 01" "Cell 02" "Cell 03" "Cell 04" "Cell 05" "Cell 06" "Cell 07" [8] "Cell 08" "Cell 09" "Cell 10" "Cell 11" "Cell 12" "Cell 13" "Cell 14" [15] "Cell 15" "Cell 16" "Cell 17" "Cell 18" "Cell 19" "Cell 20" "Cell 21" [22] "Cell 22" "Cell 23" "Cell 24" "Cell 25" "Cell 26" "Cell 27" "Cell 28" [29] "Cell 29" "Cell 30" "Cell 31" "Cell 32" We will save this tidy dataframe for later use: df_tidy %>% write.csv("df_S1P_combined_tidy.csv", row.names = FALSE) 2.4.5 Data in 96-wells format {data-in-96-wells-format} Data measured on samples in multiwell plates are often stored in a structure that resembles the plate layout. As an example, we use here a dataset from a luciferase experiment, measured with a 96-well plate luminescence reader. The data is stored in a sheet named ‘Results’ in an xlsx file. The cells in which the data is stored are located in F21:Q28. By selecting these cells, only the 96 values that were measured are read: df <- readxl::read_excel('DualLuc_example_data.xlsx', sheet = 'Results', range = "F21:Q28", col_names = F) New names: • `` -> `...1` • `` -> `...2` • `` -> `...3` • `` -> `...4` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` • `` -> `...12` The table-like layout of the data can be changed into a list of 96 values: data_as_list <- df %>% unlist(use.names = F) It is essential to know how the table is converted and this is done by reading the data from the first column, top to bottom, than the second column, etc. Knowing this, we can define the wells to which the data belongs, which would be A1, B1, … , G12, H12. column <- rep(1:12, each=8) row <- rep(LETTERS[1:8],12) Well <- paste0(row,column) Well [1] "A1" "B1" "C1" "D1" "E1" "F1" "G1" "H1" "A2" "B2" "C2" "D2" [13] "E2" "F2" "G2" "H2" "A3" "B3" "C3" "D3" "E3" "F3" "G3" "H3" [25] "A4" "B4" "C4" "D4" "E4" "F4" "G4" "H4" "A5" "B5" "C5" "D5" [37] "E5" "F5" "G5" "H5" "A6" "B6" "C6" "D6" "E6" "F6" "G6" "H6" [49] "A7" "B7" "C7" "D7" "E7" "F7" "G7" "H7" "A8" "B8" "C8" "D8" [61] "E8" "F8" "G8" "H8" "A9" "B9" "C9" "D9" "E9" "F9" "G9" "H9" [73] "A10" "B10" "C10" "D10" "E10" "F10" "G10" "H10" "A11" "B11" "C11" "D11" [85] "E11" "F11" "G11" "H11" "A12" "B12" "C12" "D12" "E12" "F12" "G12" "H12" We can now generate a dataframe that lists the wells and the values, which is a (luminescence) intensity. We can also add two additional columns that list the row and column information: df_tidy_wells <- data.frame(column, row, Well, Intensity=data_as_list) head(df_tidy_wells) column row Well Intensity 1 1 A A1 2010 2 1 B B1 3210 3 1 C C1 1965 4 1 D D1 2381 5 1 E E1 1292 6 1 F F1 991 df_tidy_wells %>% write.csv("df_tidy_wells.csv") This concludes the conversion of data from the plate layout into a tidy format. The instructions explained here are used in Protocol 4 "],["plotting-the-data.html", "Chapter 3 Plotting the Data 3.1 Data over time (continuous vs. continuous) 3.2 Discrete conditions 3.3 Statistics 3.4 Plot-a-lot - discrete data 3.5 Optimizing the data visualization 3.6 Adjusting the layout 3.7 Plot-a-lot - continuous data", " Chapter 3 Plotting the Data When the data is in the right shape, it is ready for plotting. In R there is a dedicated package, ggplot2, for state-of-the-art data visualization. It is part of the ‘tidyverse’ and available when the tidyverse package is loaded. The ggplot2 package is extremely versatile and the plots can be fully customized. This great advantage comes with a disadvantage and that is complexity. Hopefully this chapter will get you started with generating some informative and good-looking plots. In the last chapter with Complete protocols we’ll dive deeper into details. The default ‘theme’ that is used in ggplot uses a grey plotting area with white gridlines, as can be seen in the plots that were presented in the previous sections. Since I prefer a more classic, white plotting area, I use a different theme from now on. This is theme_light() and it can be set in R (when the tidyverse or ggplot2 package is loaded) as follows: theme_set(theme_light()) ggplot(mtcars, aes(wt, mpg)) + geom_point() 3.1 Data over time (continuous vs. continuous) We have previously used a quick plot function qplot() from the ggplot2 package. We will use it here again for showing single cell responses from timelapse imaging. First, we load the (tidy) data and filter the data that reports on Rho and does not have any missing values in the column named activity: df_tidy <- read.csv("df_S1P_combined_tidy.csv") df_Rho <- df_tidy %>% filter(Condition == 'Rho') %>% filter(!is.na(activity)) We use qplot() to plot the data, by defining the dataframe, and by selecting what data is used for the x- and y-axis. The default geometry (dots) is overridden to show lines and we need to indicate which column defines which is grouped and connected by the line (in this case it is defined by the column object): qplot(data=df_Rho, x=Time, y=activity, geom = 'line', group=object) Let’s now change to the ggplot() function, as it allows for more flexibility. First we create an identical plot: ggplot(data=df_Rho, aes(x=Time, y=activity, group=object)) + geom_line() The aes() function is used for mapping “aesthetics”. The aesthetics specify how the variables from the dataframe are used to visualise those variables. In this case the data in the column ‘Time’ is used for mapping the data onto the x-axis and data in the column ‘activity’ is used to map the data onto the y-axis. The geom_line() function specifies that the data is shown as a line and it can be used to set the appearance of the line. We can set the linewidth (size) and the transparency (alpha). Moreover, we can map the different objects to different colors with aes(): ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_line(aes(color=object), size=1, alpha=0.8) Since ggplot supports layers, we can add another layer that shows the data as dots using geom_point(). Note that when the definition of the plot spans multiple lines, each line (when followed by another line should end with a +: ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_line(aes(color=object), size=1, alpha=0.8) + geom_point(size=2, alpha=0.8) Note that the order is important, the geometry that is defined by the last function (lines in this example) appears on top in the plot: ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_point(size=2, alpha=0.8) + geom_line(aes(color=object), size=1, alpha=0.8) There is another way to define a plot and add layers. First we define a ggplot object: p <- ggplot(data=df_Rho, aes(x=Time, y=activity)) We can define layers with different geometries and add these to the ggplot object: p <- p + geom_point(size=2, alpha=0.8) p <- p + geom_line(aes(color=object), size=1, alpha=0.8) Just like the content of a dataframe can be displayed by typing its name, the plot can be shown by typing its name: p This is convenient and we can use it to experiment with different visualizations. Here I demonstrate this modify&plot approach to remove the legend: p + theme(legend.position = "none") Or remove the legend and add a title: p + theme(legend.position = "none") + ggtitle("Single cell responses over time") Since ggplot() is part of the tidyverse, it accepts dataframes that are passed through a pipe: %>% This can be used to select a subset of a dataframe for plotting. Below, the ‘Rac’ condition is filtered from the dataframe df_tidy and passed to ggplot for plotting: df_tidy %>% filter(Condition == 'Rac') %>% ggplot(aes(x=Time, y=activity)) + geom_line(aes(color=object)) 3.2 Discrete conditions First, we load a dataset that has intensity measurements for 5 different conditions. For each conditions there are three measurements. This would be a typical outcome of the quantification of a western blot for N=3: df <- read.csv('Low_n_tidy.csv') head(df) Condition Intensity 1 A 1.0 2 B 10.3 3 C 5.5 4 D 4.5 5 E 2.3 6 A 1.1 The basic function to plot the data is ggplot(). We supply the name of the dataframe and we define how to ‘map’ the data onto the x- and y-axis. For instance, we can plot the different conditions on the x-axis and show the size measurements on the y-axis: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) This defines the canvas, but does not plot any data yet. To plot the data, we need to define how it will be plotted. We can choose to plot it as dots with the function geom_point(): ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_point() Within geom_point() we can specify the looks of the dot. For instance, we can change its color, shape and size: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_point(color="blue", shape=18 ,size=8) One of the issues with data that has low N, is that it may not look ‘impressive’, in the sense that there is lots of empty space on the canvas. This may be a reason to resort to bar graphs. However, bar graphs only show averages, which hinders transparent communication of results (https://doi.org/10.1371/journal.pbio.1002128). In situations where a bar graph is added, it has to be defined in the first layer to not overlap with the datapoints: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean") + geom_point(size=4) In the default setting, there’s too much emphasis on the bar. This can be changed by formatting the looks of the bars, i.e. by changing the fill color, and the width: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_point(size=4) The overlap of the dots can be reduced by introducing ‘jitter’ which displays the dots with a random offset. Note that the extent of the offset can be controlled and should not exceed the width of the bar. Another way to improve the visibility of overlapping dots is to make the dots transparant. This is controlled by ‘alpha’, which should be a number between 0 (fully transarent, invisible) and 1 (not transparant). In the graph below, both jitter and transparancy are used. ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) The jitter is applied randomly. To make a plot with reproducible jitter, one can fix the seed that is used for randomization by providing set.seed() with a number of choice, which fixes the randomness: set.seed(1) ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) In the plot above, the length of the bar reflects the average value. This is only true when the bar starts from 0. Situations in which the length of the bar does not accurately reflect the number are: - using a linear scale that does not include zero - cutting the axis - using a logarithmic scale, which (per definition) does not include zero. An example is shown below, where the logarithmic scale and limites are defined in by the scale_y_log10() function. Due to the non-linear scale, the length of the bar is not proportional to the value (the average) it reflects. This leads to misinterpretation of the data. ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) + scale_y_log10(limits=c(.5,12)) 3.2.1 X-axis data: qualitative versus quantitative data Suppose that the data comes from an experiment in which the data are measured at different time points. First we define a vector that defines the timepoints: e.g. 0, 1, 2, 5, 10: t <- c(0,1,2,5,10) We need to repeat these timepoints three times, once for each replicate: t3 <- rep(t,3) Now we can add the vector to the dataframe: df <- df %>% mutate(Time=t3) And plot the activity for the different time points: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) This graph looks different because we it has numbers on the x-axis. The numbers are treated as ‘continuous quantitative data’ and the data is positioned according to the values. To treat the numbers as conditions or labels we need to convert them to qualitative data. This class of data is called factors in R. We can verify the class of data by selecting the column using the class() function. Here we select the third column of the dataframe to check its class: class(df[,3]) [1] "numeric" Now we convert the column ‘Time’ to the class factor: df <- df %>% mutate(Time=as.factor(Time)) Let’s verify that the class is changed: class(df[,3]) [1] "factor" We use the same line of code to plot the data, and the graph will look similar to the graph that used the conditions indicated with letters. ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) Whether you treat the numbers on the x-axis as labels or values determines on the data and the message that you want to convey. If it is important to know when the highest activity occurs, it may not matter that the points are not equidistant (as in this example). In fact the data in the plot may better align with the lanes of a blot (which are also equidistant) from which the data are quantified . On the other hand, if you are interested in the dynamics of the activity, the timepoints on the x-axis should reflect the actual values to enable proper interpretation. 3.3 Statistics 3.3.1 Introduction Thus far, we were mainly concerned with plotting the data. But plots with scientific data often feature some kind of statistics. Next to the mean or median, error bars are used to summarize variability or to reflect the uncertainty of the measurement. Intermezzo: Descriptive vs Inferential Statistics It is a good idea to reflect on the reason to display statistics and it is essential to understand that you can choose between descriptive and inferential statistics. The descriptive statistics are used to summarize the data. Examples of descriptive statistics are the mean, median and standard deviation. Boxplots also display descriptive statistics. Inferential statistics are used to make ‘inferences’ or, in other words, generalize the data that are measured to the population it was sampled from. It is used to compare experiments and make predictions. Examples of inferential statistics are standard error of the mean and confidence intervals. There are (at least) two ways to overlay statistics in a plot. The first way is demonstrated in the previous section, where a layer with the statistics (bar) was directly added to the plot. Below, we take this strategy a step further to display the standard deviation. 3.3.2 Data summaries directly added as a plot layer In the code below the stat_summary() defines a layer with statistics. The fun=mean statement indicates that the function mean() should be applied to every condition on the x-axis: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun = mean, geom='point', size=8, color='blue') This is pretty ugly and it is more common to indicate the mean (or median) with a horizontal line. This can be done by specifying the shape of the point: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun = mean, geom='point', shape=95, size=24, color='black') This works, but it doesn’t allow us to specify the width and the thickness of the line. To have better control over the line we turn to another ‘geom’, geom_errorbar(). This function is actually used to display errorbars, but if we only set one value for the min and max, it allows us to display the mean. We can change the looks of the horizontal bar by changing the width and the size. The latter defines the thickness of the line. ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) We can also indicate the standard deviation (SD), but we need to define a custom function to calculate the position of the upper and lower limit of the errorbar. That is, we need to display mean+SD and mean-SD for each condition. The code for the function that defines the lower limit is: function(y) {mean(y)-sd(y)} and for the upper limit it is: function(y) {mean(y)+sd(y)} Here we go (note that the width is set to a smaller value): ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='errorbar', width=0.3, size =1) By combing the layers that define the mean and de sd, we can show both: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='errorbar', width=0.3, size =1) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) Finally, an example that displays the 95% confidence intervals: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - qt((1-0.95)/2, length(y) - 1) * sd(y) / sqrt(length(y) - 1)}, fun.max=function(y) {mean(y) + qt((1-0.95)/2, length(y) - 1) * sd(y) / sqrt(length(y) - 1)}, geom='errorbar', width=0.3, size =1) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) This method works, but the code to generate this graph is pretty long and the definition of the function make it difficult to follow and understand what’s going on. In addition, the values for the statistics are not accessible. To solve these issue, I will demonstrate below a more intuitive way to calculate and display the statistics. 3.3.3 Data summaries from a dataframe We start out from the same data and dataframe. First, we calculate the statistics and assign the values to a new dataframe. To this end, we use the summarise() function for each condition (Time in this dataset) which we indicate by the use of group_by(): df_summary <- df %>% group_by(Time) %>% summarise(n=n(), mean=mean(Intensity), sd=sd(Intensity)) head(df_summary) # A tibble: 5 × 4 Time n mean sd <fct> <int> <dbl> <dbl> 1 0 3 1 0.1 2 1 3 9.83 0.451 3 2 3 6.1 1.22 4 5 3 4.67 0.208 5 10 3 3.17 0.850 This new dataframe can be used as source for displaying the statistics. Note that we need to indicate the df_summary dataframe for each layer: ggplot(data = df) + geom_jitter(aes(x=Time, y=Intensity),size=4, width=0.2, alpha=0.7) + geom_errorbar(data=df_summary, aes(x=Time,ymin=(mean-sd), ymax=(mean+sd)), width=0.3, size =1) + geom_errorbar(data=df_summary, aes(x=Time,ymin=(mean), ymax=(mean)), width=0.6, size =1) How about other stats? If we calculate other stats like sem, MAD and confidence intervals and store those in a dataframe, we can retrieve those for plotting as well. Below the code for the calculation of the most common statistics is presented. There is no function to calculare sem or the confidence interval and so we calulate those using mutate(). The confidence levels is set to 95%: Confidence_level = 0.95 df_summary <- df %>% group_by(Time) %>% summarise(n=n(), mean=mean(Intensity), median=median(Intensity), sd=sd(Intensity)) %>% mutate(sem=sd/sqrt(n-1), mean_CI_lo = mean + qt((1-Confidence_level)/2, n - 1) * sem, mean_CI_hi = mean - qt((1-Confidence_level)/2, n - 1) * sem ) head(df_summary) # A tibble: 5 × 8 Time n mean median sd sem mean_CI_lo mean_CI_hi <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 3 1 1 0.1 0.0707 0.696 1.30 2 1 3 9.83 9.8 0.451 0.319 8.46 11.2 3 2 3 6.1 5.5 1.22 0.860 2.40 9.80 4 5 3 4.67 4.6 0.208 0.147 4.03 5.3 5 10 3 3.17 3.2 0.850 0.601 0.579 5.75 In principle the code for plotting the error bars that reflect the standard deviations (or sem) can be simplified if the upper and lower limit are calculated, similar to the example shown above for the 95% confidence intervals. 3.3.4 Data summaries for continuous x-axis data Let’s revisit the data from the time-course of Rho GTPase activity that we’ve looked at earlier: df_tidy <- read.csv("df_S1P_combined_tidy.csv") df_Rho <- df_tidy %>% filter(Condition == 'Rho') %>% filter(!is.na(activity)) Calculate the statistics for each time point: df_summary <- df_Rho %>% group_by(Time) %>% summarise(n=n(), mean=mean(activity), median=median(activity), sd=sd(activity)) %>% mutate(sem=sd/sqrt(n-1), mean_CI_lo = mean + qt((1-Confidence_level)/2, n - 1) * sem, mean_CI_hi = mean - qt((1-Confidence_level)/2, n - 1) * sem ) head(df_summary) # A tibble: 6 × 8 Time n mean median sd sem mean_CI_lo mean_CI_hi <dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 12 0.998 0.997 0.00477 0.00144 0.995 1.00 2 0.167 12 1.00 1.00 0.00615 0.00186 0.999 1.01 3 0.333 12 0.998 0.998 0.00260 0.000783 0.996 1.00 4 0.5 12 0.999 0.998 0.00657 0.00198 0.995 1.00 5 0.667 12 1.00 1.00 0.00703 0.00212 0.998 1.01 6 0.833 12 1.00 1.00 0.00741 0.00223 0.998 1.01 With this data summary it is possible to depict the 95% confidence interval as error bars: ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, color=object),size=1, alpha=0.7) + geom_errorbar(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), width=0.3, size=1, alpha=0.7) It works, but it is also quite messy. Luckily ggplot has a more elegant solution and that’s geom_ribbon(): ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, group=object),size=.5, alpha=0.4) + geom_ribbon(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), fill='blue', alpha=0.3) Note that I also removed the color of the individual lines, as it is more about the ensemble and it’s average than the individual line. Adding a line to reflect the average is pretty straightforward: ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, group=object),size=.5, alpha=0.4) + geom_ribbon(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), fill='blue', alpha=0.3) + geom_line(data=df_summary, aes(x=Time,y=mean), color='blue', size=2, alpha=0.8) 3.4 Plot-a-lot - discrete data Other data summaries that are often depicted in plots are boxplots and violinplots. These are not suited for data with low n, as in the previous example. The reason is that the boxplot is defined by five values, i.e. the median (the central line), the interquartile range, IQR (the two limits of the box) and the endpoints of the two lines, also known as whiskers. It makes no sense to use a boxplot for n=5, since it does not add any new information. There is no hard cut-off, but in my opinion boxplots make sense when you have 10 or more datapoints per condition. Although the boxplot is a good data summary for normally distributed and skewed data distributions, it doesn’t capture the underlying distribution well when it is bi- or multimodal. In these cases, a violin plot is better suited. The box- and violinplot are easily added as a layer as they are defined by specific functions, geom_boxplot() and geom_violin(). First, let’s load a dataset with larger n. The function summary() provides a quick overview of the data: df <- read.csv('Area_tidy.csv') summary(df) Condition value Length:283 Min. : 477.2 Class :character 1st Qu.:1152.1 Mode :character Median :1490.9 Mean :1567.8 3rd Qu.:1838.1 Max. :3906.7 There are three conditions, with relative large n. Let’s plot the data: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) Adding a boxplot: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) + geom_boxplot() The geom_boxplot displays outliers (data beyond the whiskers). This is clear when only the boxplot is shown: ggplot(df, aes(x=Condition, y=value)) + geom_boxplot() When the data is displayed together with the boxplot, the outliers need to be removed to avoid duplication. And to make sure that the data is visibel and not hidden by the boxplot, we can either change the order of the layers or remove the white color that is used to fill the box: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) + geom_boxplot(fill=NA, outlier.color = NA) In case a boxplot is used as summary, it may be useful to have the values of Q1, Q3 and the interquartile range. The code shown below can be used to calculate all these paramters and also includes the median absolute deviation (MAD) as a robust measure of variability: Confidence_level = 0.95 df_summary <- df %>% group_by(Condition) %>% summarise(n=n(), mean=mean(value), median=median(value), sd=sd(value), MAD=mad(value, constant=1), IQR=IQR(value), Q1=quantile(value, probs=0.25), Q3=quantile(value, probs=0.75)) df_summary # A tibble: 3 × 9 Condition n mean median sd MAD IQR Q1 Q3 <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 LARG 99 1361. 1271. 486. 250. 485. 1053. 1538. 2 TIAM 110 1808. 1705. 704. 416. 818. 1293. 2112. 3 wt 74 1487. 1509. 459. 333. 662. 1158. 1821. Display of a violinplot in addition to the data: ggplot(df, aes(x=Condition, y=value)) + geom_violin() + geom_jitter(width=0.2, alpha=0.5) Personally, I like the combination of data and violinplot, but the jitter can make the plot look messy. There are packages that enable the plotting of the data according to its distribution. There is geom_sina() from the {ggforce} package and geom_quasirandom() from the {ggbeeswarm} package: library(ggbeeswarm) ggplot(df, aes(x=Condition, y=value)) + geom_violin() + geom_quasirandom(width=0.3, alpha=0.5) Sometimes, you find examples of boxplots overlayed on violin plots, like this (and note that we have filled the violins with a unique color for each condition): ggplot(df, aes(x=Condition, y=value)) + geom_violin(aes(fill=Condition), alpha=0.5) + geom_boxplot(width=0.1, outlier.color = NA) Note that geom_quasirandom() can generate plots with excessive overlap between data points when there’s large amounts of data. In some cases this can be solved by increasing the transparency (by decreasing alpha). Another option is to use geom_beeswarm(), which does not allow overlap of the points. I have a preference for showing the actual data, but for large n the violinplot may better convey the message of the data than a cluttered plot that shows a lot of dots. 3.5 Optimizing the data visualization 3.5.1 Rotation Rotating a plot by 90 degrees can be surprisingly effective. Especially when the labels that are used for the x-axis are so long that they need to be rotated, it is better to rotate the plot. This improves the readability of the numbers and labels on both the x- and y-axis and avoids the need of tilting your head. library(ggbeeswarm) ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) + coord_flip() An example of how to further tweak a 90˚ rotated plots is given in Protocol 2 3.5.2 Ordering conditions The order of the conditions used for the x-axis (for discrete conditions) is numeric and alphabetic. In case of a large number of conditions, it can help to sort these according to the median or mean value. This requires another order of the factors. To check the order of the factors in the dataframe we use: levels(df$Condition) NULL Now, we change the order, sorting the factors according to the median of “value” and we verify the order: df <- df %>% mutate(Condition = fct_reorder(Condition, value, .fun='median')) levels(df$Condition) [1] "LARG" "wt" "TIAM" Let’s plot the data: ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) The factors on the x-axis are now sorted according to the median of value. It is also possible to manually set the sequence, in this example the order is set to wt, LARG, TIAM: df <- df %>% mutate(Condition = fct_relevel(Condition, c("LARG", "TIAM", "wt"))) ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) In the examples above, we have modified the dataframe, since we used mutate() to change the order. To set the order for plotting without altering the dataframe we can define the reordering within ggplot: ggplot(df, aes(x=fct_reorder(Condition, value, .fun='median'), y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) Alternatively, we can use the pipe operator to feed the data in the reordering function and then use the reordered dataframe for plotting: df %>% mutate(Condition = fct_reorder(Condition, value, .fun='median')) %>% ggplot(aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) We can check that the order of the levels in the dataframe has not changed and differs from the order in the plot: levels(df$Condition) [1] "LARG" "TIAM" "wt" 3.6 Adjusting the layout Details matter, also in data visualization. Editing labels, adding titles or annotating data can make the difference between a poor and a clear data visualization. Although it can be quicker and easier to edit a plot with software that deals with vectors, it is not reproducible. And when you need to change the graph, the editing starts all over again. Luckily, with ggplot2, you have full control over every element. A lot of elements are controlled by the function theme(), and examples are the label size and color, the grid, the legend style and the color of the plot elements. This level of control offers great power, but it can be quite daunting (and non-intuitive) for new users. We discuss a couple of straightforward manipulations of the theme below. More detailed modifications of the layout will be showcased in the chapter with Complete Protocols. 3.6.1 Themes Let’s look at a violinplot and we plot it with the default theme, which has a grey background: p <- ggplot(df, aes(x=Condition, y=value)) + geom_violin(aes(fill=Condition), alpha=0.5) + geom_boxplot(width=0.1, outlier.color = NA) + theme_grey() p The default theme is OK-ish and we can change it to one of the other themes that are available in the ggplot2 package, for instance theme_classic(): p + theme_classic() The ggplot2 package has a default dark theme, but that only generate a dark background in the plot area. I made a customized theme theme_darker() for plots on dark background, e.g. black slides. It needs to be loaded with the source() function and then it can be applied: source("https://raw.githubusercontent.com/JoachimGoedhart/PlotTwist/master/themes.R") p + theme_darker() Finally, we can modify the text size of all text elements: p + theme_bw(base_size = 16) To reset the theme to the default that is used throughout the book: p <- p + theme_light() 3.6.2 Legend The legend can be controlled through the theme() function. Legends are automatically created when different colors or shapes are used. One example is the plot below, where different conditions are shown in different colors. To change the style, we define the plot object p: To remove the legend we use: p + theme(legend.position = "none") Other options are “top”, “left”, “bottom” and (the default) “right”. The items of the legend can also be displayed horizontally, which is a nice fit when the legend is shown on top of the plot: p + theme(legend.position = "top", legend.direction = "horizontal") To left align the legend: p + theme(legend.position = "top", legend.direction = "horizontal", legend.justification='left') 3.6.3 Grids I am not a big fan of grids, so I often remove it: p + theme(panel.grid = element_blank()) To only remove the vertical grid and make the horizontal grid more pronounced: p + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_line(size=0.5, color='grey30'), panel.grid.minor.y = element_line(size=0.2, color='grey30') ) 3.6.4 Labels/Titles Clear labeling aids the interpretation of the plot. The actual labels and titles are changed or added with the function labs() and their style is controled with the theme() function. Let’s first look at the labels. The titles of the axes and legend are retrieved from the column names in the dataframe. To adjust the axis labels with labs(): p + labs(x='Perturbation', y='Area [µm]') Note that the title of the legend is not changed. To change the legend title we need to supply a label for ‘fill’, since the legend in this example indicates the color that was used to ‘fill’ the violin plots: p + labs(x='Perturbation', y='Area [µm]', fill='Perturbation:') A title, subtitle and caption can also be added with labs(): p + labs(x='Condition', y='Area [µm]', title='This is the title...', subtitle='...and this is the subtitle', caption='A caption is text at the bottom of the plot') The style of the different labels can be set with theme(): p + labs(x='Condition', y='Area [µm]', title='This is the title...', subtitle='...and this is the subtitle', caption='A caption is text at the bottom of the plot') + theme(axis.title.x = element_text(size=16, color='black'), axis.title.y = element_text(size=16, color='black'), axis.text = element_text(size=14, color='orange'), plot.title = element_text(size=18, color='slateblue'), plot.subtitle = element_text(size=12, color='slateblue', hjust = 1), plot.caption = element_text(size=10, color='grey60', face = "italic") ) This is a demonstration of how the different pieces of text can be modified, not a template for a proper data visualization since it uses too many, unnecessary, colors! 3.7 Plot-a-lot - continuous data It can be a challenge to look at individual data or samples instead of summaries when you have a large amount of data. I will illustrate a number of options based on the timeseries data of Rac activity, that we have seen before. This dataset is still quite simple, but given its heterogeneity it illustrates well how the data can be presented in such a way that all traces can be inspected. df_Rac <- read.csv("df_S1P_combined_tidy.csv") %>% filter(Condition == 'Rac') %>% filter(!is.na(activity)) head(df_Rac) Condition Treatment Time object activity 1 Rac S1P 0 Cell 01 1.0012160 2 Rac S1P 0 Cell 02 1.0026460 3 Rac S1P 0 Cell 03 1.0022090 4 Rac S1P 0 Cell 04 0.9917870 5 Rac S1P 0 Cell 05 0.9935569 6 Rac S1P 0 Cell 06 0.9961453 We have seen this data before, but let’s look at this again in an ordinary line plot: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line(aes(color=object)) There is a lot to see here and it is a bit of mess. Clearly, there is variation, but it is difficult to connect a line, by its color to the cell it represents. Below, there are some suggestions how this data can be presented more clearly. 3.7.1 Small multiples Small multiples remind me of a stamp collection, where every stamp is a (small) plot. This works very well to display lots of data. It is also pretty straightforward in ggplot2 with facet_wrap(): ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object) I got rid of color, since it would be redundant and the improved contrast of the black line helps to focus on the data. The lay-out of the 32 mini plots can be improved by fixing the number of columns: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object, ncol = 8) Since the small multiple is at its best, when the data stands out and the text and other elements are minimized. Here is an extreme version of the plot to make that point: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object, ncol = 8) + theme_void() Further optimization of a small multiple plot is discussed in Protocol 3. For complex experimental designs, the data can split according to two different factors. This also uses a faceting strategy, with the facet_grid() function. This works well when the data has two discrete variables and the application of this function is demonstrated in Protocol 4. 3.7.2 Heatmaps Heatmaps are well suited for dense data and have traditionally been used for microarray and other -omics data. Heatmaps can also be used for timeseries data. To do this, we (i) keep the x-axis as is, (ii) map the objects on the y-axis and (iii) specify that the color of the tile reflects activity: ggplot(data=df_Rac, aes(x=Time, y=object)) + geom_tile(aes(fill=activity)) The default colorscale is not ideal. I personally like the (colorblind friendly) viridis scale and this colorscale can be used to fill the tile with scale_fill_viridis_c(). To sort the data according to the object labels as they appear in the dataframe: ggplot(data=df_Rac, aes(x=Time, y=object)) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() To reverse the order of the objects we can use fct_rev(): ggplot(data=df_Rac, aes(x=Time, y=fct_rev(object))) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() A heatmap does not need a grid and usually has no axes. Plus, when there are many objects, it makes sense to hide their names, ticks and the y-axis label: p <- ggplot(data=df_Rac, aes(x=Time, y=fct_rev(object))) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() + theme(text = element_text(size=16), # Remove borders panel.border = element_blank(), # Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), # Remove text of the y-axis axis.text.y = element_blank(), # Remove ticks on y-axis axis.ticks.y = element_blank(), # Remove label of y-axis axis.title.y = element_blank(), # Make x-axis ticks more pronounced axis.ticks = element_line(colour = "black") ) p 3.7.3 Custom objects The use of titles, captions and legends will add infomration to the data visualization. Tweaking the theme will improve the style of the plot and give it the right layout. There’s another layer of attributes that are not discussed yet and these are custom objects and labels. These additions will help to tell the story, i.e. by explaining the experimental design. Let’s look at the cellular response to stimulation with a ligand. The df_Rho dataframe that we have used earlier is used in this example and we plot the average and standard deviation: p <- ggplot(data=df_Rho, aes(x=Time, y=activity)) + stat_summary(fun = mean, geom='line', size=2) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='ribbon', color='black', size =.1, alpha=0.2) p The ligand is added at t=1.75 and we can add a vertical line with geom_vline() to indicate this: p + geom_vline(xintercept = 1.75, size=1, color="grey20") More flexible labeling is provided with the annotate() function, which enables the addition of line segments, rectangles and text. First, let’s reproduce the the previous plot with this function, by defining a line segment. The line segment has two coordinates for the start and two for the end. The x position is 1.75 for both start and end. For the y-coordinate we can use Inf and -Inf to define the endpoints of the line. The use of Inf has two advantages. We do not need to define the exact points for the start and end and we prevent rescaling of the plot to show the segment: p + annotate("segment", x = 1.75, xend = 1.75, y = -Inf, yend = Inf, size=1, color="grey20") In a similar way we can define a rectangle to highlight the time where the ligand was present (It is possible to use Inf for xmax here, in that case the blue rectangle would fill up the entire plot to the right). Since the rectangle is added as the last layer, it would occlude the data. That’s why a an alpha level of 0.1 is used to make the rectangle transparent: p + annotate("rect", xmin = 1.75, xmax = 10, ymin = -Inf, ymax = Inf, fill="blue", alpha=0.1) We can also add an rectangle to the top of the graph: p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.26, ymax = 1.27, fill="black") + annotate("text", x=5, y=1.29, label="ligand", size=6) In the example above, the rectangle and text are added to the plot area and the y-axis is expanded. To move the annotation out of the plot area, we need to increase the white space above the plot with theme() and we can scale the plot with coord_cartesian(): p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.25, ymax = 1.26, fill="black") + annotate("text", x=5, y=1.28, label="ligand", size=6) + coord_cartesian(ylim = c(0.98,1.23), clip = 'off') + theme(plot.margin = margin(t = 50, r = 0, b = 0, l = 0, unit = "pt")) The annotation is part of the plot and would normally be invisible since everything outside the plot area is clipped. To show the annotation, clip = 'off' is needed in the code above. However, this may lead to undesired behavior when the scaling is set in such a way that the data falls outside the plot area. Although you could use it to create a dramatic ‘off-the-charts’ effect. p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.25, ymax = 1.26, fill="black") + annotate("text", x=5, y=1.28, label="ligand", size=6) + coord_cartesian(ylim = c(0.98,1.15), clip = 'off') + theme(plot.margin = margin(t = 130, r = 0, b = 0, l = 0, unit = "pt")) This concludes a couple examples of the annotate() function. Protocol 5 is a good example how these annotations can assist to build an informative data visualization. "],["complete-protocols.html", "Chapter 4 Complete protocols 4.1 Protocol 1 - Spectra of fluorescent proteins 4.2 Protocol 2 - A superplot of calcium concentrations 4.3 Protocol 3 - small multiples of time courses 4.4 Protocol 4 - Plotting data from a 96-wells experiment 4.5 Protocol 5 - A map of amino acids 4.6 Protocol 6 - Heatmap style visualization of timelapse data 4.7 Protocol 7 - Ridgeline plot 4.8 Protocol 8 - Plotting data in a 96-wells layout 4.9 Protocol 9 - A dose response curve with fit 4.10 Protocol 10 - Plotting data that was harvestd with a Google form 4.11 Protocol 11 - Plotting time data from a Google form 4.12 Protocol 12 - Plotting grouped data", " Chapter 4 Complete protocols This chapter showcases several complete protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github, just follow this link. In the same folder you can find the R markdown files for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the R markdown file (and the data) and run it step by step. The R markdown files can also be used as a starting point to apply the same visualization to your own data. An overview of the data visualizations that are generated by the protocols: 4.1 Protocol 1 - Spectra of fluorescent proteins This protocol describes how you can turn a csv with spectral data that is obtained from FPbase.org into a plot of those spectra. First, we load the required package: library(tidyverse) For this data visualization, I selected several spectra from fluorescent proteins at FPbase.org: https://www.fpbase.org/spectra/?s=1746,6551,101,102,123,124,1604,1606&showY=0&showX=1&showGrid=0&areaFill=1&logScale=0&scaleEC=0&scaleQY=0&shareTooltip=1&palette=wavelength The data was downloaded in CSV format (by clicking on the button in the lower right corner of the webpage) and renamed to ‘FPbase_Spectra_4FPs.csv’. We read the data from the CSV by using the read_csv() function. This function is part of the tidy verse and loads the data as a tibble. It also guesses type of data for each column. To hide that information, we use show_col_types = FALSE here. df_raw <- read_csv("FPbase_Spectra_4FPs.csv", show_col_types = FALSE) Let’s briefly look at what we have loaded: glimpse(df_raw) Rows: 512 Columns: 9 $ Wavelength <dbl> 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310… $ `mTurquoise2 EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mTurquoise2 EX` <dbl> 0.2484, 0.2266, 0.2048, 0.1852, 0.1634, 0.1482, 0.132… $ `mNeonGreen EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mNeonGreen EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mScarlet-I EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mScarlet-I EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `miRFP670 EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `miRFP670 EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… The data needs conversion to a tidy format before plotting. Since we have a single continuous data column with Wavelength information that is used for the x-axis, it is excluded from the operation: df_1 <- pivot_longer( df_raw, cols = -Wavelength, names_to = "Sample", values_to = "Intensity" ) There are several rows that have NA values for Intensity and this is how to get rid of that: df_1 <- df_1 %>% drop_na(Intensity) The column ‘Sample’ has labels for the fluorescent protein and the type of spectrum. We can separate that column into two different columns that we name ‘Fluorescent Protein’ and ‘Spectrum’: df_1 <- df_1 %>% separate(Sample, c("Fluorescent Protein", "Spectrum"), sep = " ") Let’s do a first attempt and plot the data: ggplot( data = df_1, aes(x = Wavelength, y = Intensity, color = `Fluorescent Protein`) ) + geom_line(aes(linetype = Spectrum), size = 1) This looks pretty good already. Now let’s change the order of the fluorescent proteins to their order in the plot: df_1 <- df_1 %>% mutate(`Fluorescent Protein` = forcats::fct_relevel( `Fluorescent Protein`, c("mTurquoise2", "mNeonGreen", "mScarlet-I", "miRFP670") )) The data is in the right shape now, so let’s save it: df_1 %>% write.csv("protocol_1.csv", row.names=FALSE) We define the plot object and add an extra geometry, geom_area() to fill the area under the curves: p <- ggplot( data = df_1, aes( x = Wavelength, y = Intensity, fill = `Fluorescent Protein` ) ) + geom_line(aes(linetype = Spectrum), size = 0.5, alpha = 0.5 ) + geom_area( aes(linetype = Spectrum), color = NA, position = "identity", size = 1, alpha = 0.5 ) Let’s check the result: p Next, we set the limits of the axis and force the y-axis to start at 0 p <- p + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.1)) + scale_x_continuous(expand = c(0,0), limits = c(350, 810)) Add labels: p <- p + labs( title = "Spectra of Fluorescent Proteins", x = "Wavelength [nm]", y = "Normalized Intensity [a.u.]", caption = "@joachimgoedhart\\n(based on data from FPbase.org)", tag = "Protocol 1" ) Modify the layout by adjusting the theme. Comments are used to explain effect of the individual lines of code: p <- #Set text size p + theme_light(base_size = 14) + theme( plot.caption = element_text( color = "grey80", hjust = 1 ), #Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), #Set position of legend legend.position = "top", legend.justification = "left" #Define the legend layout ) + guides( linetype = "none", fill = guide_legend(title = NULL, label.position = "right") ) p We are almost there, except that the colors of the plot do not match with the natural colors of the fluorescent proteins. Let’s fix that by defining a custom color palette. The order of the colors matches with the order of the fluorescent proteins that was defined earlier: custom_colors <- c("blue", "green", "orange", "red") To apply the custom colors to the filled area: p <- p + scale_fill_manual(values = custom_colors) This is the result: p To save this plot as a PNG file: png(file=paste0("Protocol_01.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.2 Protocol 2 - A superplot of calcium concentrations This protocol is used to create a superplot which differentiates between technical and biological replicates. The concept of superplots has been reported by Lord and colleagues (Lord et al., 2021). We will use the data that was used to create figure 5e in a publication by van der Linden et al. (2021). The figure in the publication summarizes the data from all experiments and does not identify the biological replicates. Below, we will differentiate the biological replicates, by treating each batch of neutrophils as a biological replicate. We start by loading the required tidyverse package: library(tidyverse) We define the confidence level as 95%: Confidence_level <- 0.95 The data is stored in an excel sheet and we read it, skipping the first 6 lines which contain comments: df_raw <- readxl::read_excel('figure5.xlsx', skip=6) Let’s look at the data: head(df_raw) # A tibble: 6 × 7 `Experimental day` `Replicate no.` `Neutrophil no.` `Batch no. neutrop…` Stage <dbl> <dbl> <dbl> <dbl> <chr> 1 1 1 1 1 befo… 2 1 1 1 1 befo… 3 1 1 1 1 befo… 4 1 1 1 1 befo… 5 1 1 1 1 befo… 6 1 1 1 1 befo… # … with 2 more variables: `dF/F0` <chr>, `Calcium (uM)` <dbl> The data is already in a tidy format. The column with ‘Stage’ has the four different conditions for which we will compare the data in the column ‘Calcium (uM)’. We change the name of the column ‘Batch no. neutrophils’ to ‘Replicate’ and make sure the different replicates are treated as factors (qualitative data): df_raw <- df_raw %>% mutate(Replicate = as.factor(`Batch no. neutrophils`)) Let’s look at the data, and identify the biological replicates, as suggested in the original publication on Superplot by (Lord et al., 2021). In this example a color code is used to label the replicates: ggplot(data=df_raw, aes(x=Stage)) + geom_jitter(data=df_raw, aes(x=Stage, y=`Calcium (uM)`, color=Replicate)) To display the statistics for the individual biological replicates, we define a new dataframe. To this end, we group the data for the different stages and biological replicates: df_summary <- df_raw %>% group_by(Stage, Replicate) %>% summarise(n=n(), mean=mean(`Calcium (uM)`)) `summarise()` has grouped output by 'Stage'. You can override using the `.groups` argument. Next, we use ‘df_summary’ which holds the averages of each biological replicate, and we calculate the statistics for the different conditions: df_summary_replicas <- df_summary %>% group_by(Stage) %>% mutate(n_rep=n(), mean_rep=mean(mean), sd_rep = sd(mean)) %>% mutate(sem = sd_rep / sqrt(n_rep - 1), `95%CI_lo` = mean_rep + qt((1-Confidence_level)/2, n_rep - 1) * sem, `95%CI_hi` = mean_rep - qt((1-Confidence_level)/2, n_rep - 1) * sem, NULL) The dataframe has the summary of the conditions and note that each condition has a summary of 4 biological replicates: head(df_summary_replicas) # A tibble: 6 × 10 # Groups: Stage [2] Stage Replicate n mean n_rep mean_rep sd_rep sem `95%CI_lo` <chr> <fct> <int> <dbl> <int> <dbl> <dbl> <dbl> <dbl> 1 before 1 38 0.0305 4 0.0301 0.00414 0.00239 0.0225 2 before 2 67 0.0270 4 0.0301 0.00414 0.00239 0.0225 3 before 3 56 0.0358 4 0.0301 0.00414 0.00239 0.0225 4 before 4 55 0.0270 4 0.0301 0.00414 0.00239 0.0225 5 crawling 1 7 0.0296 4 0.0317 0.00339 0.00196 0.0255 6 crawling 2 29 0.0289 4 0.0317 0.00339 0.00196 0.0255 # … with 1 more variable: `95%CI_hi` <dbl> We can now add or ‘bind’ the data of ‘df_summary_replicas’ to the original dataframe ‘df’ and store this as a dataframe ‘df_2’: df_2 <- df_raw %>% left_join(df_summary_replicas, by = c("Stage","Replicate")) Let’s save this data: df_2 %>% write.csv("protocol_2.csv", row.names=FALSE) Let’s first define a basic plot with all of the data for each stage shown as a violinplot: p <- ggplot(data=df_2, aes(x=Stage)) + geom_violin(data=df_2, aes(x=Stage, y=`Calcium (uM)`), color=NA, fill="grey80") This is what it looks like: p We add the 95% confidence interval from the summary of the biological replicates as a line: p <- p + geom_linerange(data = df_2, aes(ymin=`95%CI_lo`, ymax=`95%CI_hi`), size=1, alpha=0.8) And we add the mean value of each replicate as a dot. Here, the size of the dot is reflecting n: p <- p + geom_point(data=df_2, aes(x=Stage, y=mean, size=n, fill=Replicate), shape=21, stroke = 1) The function scale_size_area() ensures that 0 is represented as an area of 0 and allows to to define that an n of 10,50 and 90 is shown in the legend: p <- p + scale_size_area(breaks = c(10, 50, 90), max_size = 6) This is what that looks like: p Next, one of my favorite tweaks for discrete conditions is to rotate the plot 90 degrees. At the same time, the limits are defined. p <- p + coord_flip(ylim = c(0.02,0.09)) + # This ensures correct order of conditions when plot is rotated 90 degrees scale_x_discrete(limits = rev) Rotation improves readability of the labels for the conditions, even when they are long. It also easier to read the different calcium levels: p To guide the interpretation, a line is added as a threshold of 0.06 µM (=60 nM): p <- p + geom_hline(yintercept = 0.060, linetype='dotted') Adjusting the axis labels and adding a title and caption: p <- p + labs( title = "Calcium concentrations are less than 60 nM", subtitle = "at different stages of transendothelial migration", x = "Stage", y = "Calcium [µM]", caption = "@joachimgoedhart\\n(based on data from van der Linden, DOI: 10.1101/2021.06.21.449214)", tag = "Protocol 2" ) The layout it further optimized. The most tricky part is positioning of the label for the different conditions. It is placed right above the conditions, which I really like. However, getting this right involves a bit of trial and error and I recommend playing with the parameters to see how it affects the positioning. Something similar applies to the legend which is moved into the lower right corner of the plot, although this is eassier to accomplish. The comments explain the effect of the different lines: p <- #Set text size p + theme_classic(base_size = 16) + theme( plot.caption = element_text( color = "grey80", hjust = 1 ), #Set position of legend to lower right corner legend.position = c(0.88,0.15), #This line positions the label ('title') of the conditions axis.title.y = element_text(vjust = 0.98, angle = 0, margin=margin(l=70)), #This line positions the names of the conditions #A negative margin is needed for aligning the y-axis 'title' with the 'text' axis.text.y = element_text(vjust = 0.5, hjust=1, angle = 0, margin=margin(l=-90, r=5)), #Move 'tag', so its position partially overlaps with the conditions plot.tag.position = c(0.06,0.99) ) + guides(fill = "none", size = guide_legend(title = 'n per replicate', label.position = "left") ) p To save the plot as a PNG file: png(file=paste0("Protocol_02.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.3 Protocol 3 - small multiples of time courses This protocol displays a number of different timecourses as ‘small multiples’. Small multiples, as the name suggests, displays many small plot separately as a stamp collection. By stressing the data, rather than the labels and grids, this can be a powerful visualization strategy. The data is taken from a publication by Arts et al. (2021) and we recreate figure panel 1F. The original figure is in small multiple format, but we tweak it a bit more to increase the focus on the data. Let’s first load the necessary package: library(tidyverse) The data comes from an excel file: df_raw <- readxl::read_excel("Data_Arts_Circularity.xlsx") head(df_raw) # A tibble: 6 × 13 time `neutro 1` `neutro 2` `neutro 3` `neutro 4` `neutro 5` `neutro 6` <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 0.53 0.54 0.55 0.59 0.58 0.34 2 10 0.44 0.6 0.5 0.4 0.54 0.4 3 20 0.33 0.55 0.64 0.3 0.48 0.41 4 30 0.35 0.54 0.69 0.28 0.52 0.32 5 40 0.41 0.53 0.57 0.23 0.44 0.29 6 50 0.32 0.4 0.4 0.26 0.43 0.25 # … with 6 more variables: `neutro 7` <dbl>, `neutro 8` <dbl>, # `neutro 9` <dbl>, `neutro 10` <dbl>, `neutro 11` <dbl>, `neutro 12` <dbl> It is in a wide format, so we need to make it tidy. The parameter that was measured over time is the ‘roundness’ of cells: df_3 <- pivot_longer( df_raw, cols = -time, names_to = "Cell", values_to = "Roundness" ) The data is in the right shape now, so let’s save it: df_3 %>% write.csv("protocol_3.csv", row.names = FALSE) First we create a line plot of all the data: p <- ggplot(df_3, aes(x=time, y=Roundness, group=Cell)) + geom_line() p With the facet_wrap() function, we turn this into a small multiple: p <- p + facet_wrap(~Cell) p Set the limits of the axis and force the y-axis to start at 0 p <- p + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.0)) + scale_x_continuous(expand = c(0,0), limits = c(0, 300)) Use a minimal theme and remove the strips and grid to increase focus on the data: p <- p + theme_minimal(base_size = 14) p <- p + theme(strip.background = element_blank(), strip.text = element_blank(), plot.caption = element_text(color = "grey80"), #Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) p I do not like the repeated axis for the different plots. We can remove those: p <- p + theme( #Remove axis labels axis.text = element_blank() ) p This is a very minimal plot, focusing entirely on the data. It may work well, but it is informative to add some information about the scaling of the x- and y-axis. To achieve this, I add lines to the lower left plot, which correspond to the data of ‘neutro 6’ (you can see this in the small multiple plot where each plot was labeled). I define a new dataframe with the x- and y-scale for ‘neutro 6’ to do just that: ann_line<-data.frame(xmin=0,xmax=300,ymin=0,ymax=1, Cell=factor("neutro 6",levels=c("neutro 6"))) ann_line xmin xmax ymin ymax Cell 1 0 300 0 1 neutro 6 This dataframe can now be used to draw two lines with geom_segment(): p <- p + #Vertical line geom_segment(data=ann_line, aes(x=xmin,xend=xmin,y=ymin,yend=ymax), size=2, color='grey40') + #Horizontal line geom_segment(data=ann_line, aes(x=xmin,xend=xmax,y=ymin,yend=ymin), size=2, color='grey40') + NULL p The plot is now in black and white which gives it a strong contrast. We can make it a bit more soft and pleasant to look at by changing to shades of grey. Also, the labels of the axes are moved next to the lines: p <- p + theme(panel.background = element_rect(fill='grey98', color=NA), panel.border = element_rect(color='grey90', fill=NA), axis.title.x = element_text(size=14, hjust = 0, color='grey40'), axis.title.y = element_text(size=14, vjust = 0, hjust=0, angle = 90, color='grey40'), ) Finally, we add a title, caption, and labels (and a scale in brackets): p <- p + labs( title = "Changes in the shape of migrating cells over time", x = "Time [300s]", y = "Circularity [0-1]", caption = "@joachimgoedhart\\n(based on data from Arts et al., DOI: 10.3389/fimmu.2021.667213)", tag = "Protocol 3" ) p png(file=paste0("Protocol_03.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.4 Protocol 4 - Plotting data from a 96-wells experiment This protocol showcases some serious data wrangling and tidying. One reason is that the data is acquired with a 96-wells plate reader and the data is stored according to the layout of the plate. This makes total sense from a human perspective, but it is not well suited for data visualization. In addition, the plate is measured twice. One measurement is the luminescence from a luciferase and the other measurement is the luminescence from Renilla. The latter reading serves as a reference and therefore, the luciferase data is divided by the Renilla intensities. A final step before the data is visualized is a normalization to a control condition. The code that is shown here is also the basis for the plotXpress app that can be used to process and visualize the data. In fact, the data visualization is very close to the standard output of plotXpress and uses the same example data. We start by loading a package that we need: library(tidyverse) The measured data is read from an excel sheet. Note that this is the raw data that is stored by the software that operates the plate reader: df_raw <- readxl::read_excel("DualLuc_example_data.xlsx", sheet = "Results") New names: • `` -> `...1` • `` -> `...2` • `` -> `...3` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` • `` -> `...12` • `` -> `...13` • `` -> `...14` • `` -> `...15` • `` -> `...16` • `` -> `...17` The experimental conditions for each well are stored in a separate CSV file, generated by the experimentalist that did the experiment: df_design <- read.csv("Tidy_design.csv") head(df_design) Wells condition treatment1 treatment2 1 A01 - HEK - 2 B01 - HEK - 3 C01 - HEK - 4 D01 - HEK - 5 E01 - neuron - 6 F01 - neuron - You can see that the design file is tidy. In contrast the excel file with data is far from tidy. In the excel sheet, two ‘rectangles’ of cells define the data for the firefly & renilla reads. The data is subset and converted to a vector firefly <- df_raw[19:26,6:17] %>% unlist(use.names = FALSE) renilla <- df_raw[40:47,6:17] %>% unlist(use.names = FALSE) Define a dataframe with wells column <- rep(1:12, each=8) row <- rep(LETTERS[1:8],12) For convenience, all numbers should consist of 2 digits and so we add a zero that precedes the single digit numbers: x0 <- str_pad(column, 2, pad = "0") To generate a unique index for each row in the dataframe, we define ‘Wells’, which combines the row and column index: Wells <- paste0(row,x0) Next, we create a dataframe that holds the data of individual columns, rows and wells: df_plate <- data.frame(column,row,Wells) head(df_plate) column row Wells 1 1 A A01 2 1 B B01 3 1 C C01 4 1 D D01 5 1 E E01 6 1 F F01 Add to df_plate the vectors with data from firefly and renilla reads df_4 <- data.frame(df_plate,firefly,renilla) Merge the design with the data, based on the well ID - left_join() is used to add only data for wells that are listed in the design dataframe df_4 <- left_join(df_design, df_4, by='Wells') head(df_4) Wells condition treatment1 treatment2 column row firefly renilla 1 A01 - HEK - 1 A 2010 2391540 2 B01 - HEK - 1 B 3210 2391639 3 C01 - HEK - 1 C 1965 2390991 4 D01 - HEK - 1 D 2381 2391774 5 E01 - neuron - 1 E 1292 269021 6 F01 - neuron - 1 F 991 268918 Calculate the relative expression from the firefly/renilla ratio df_4 <- df_4 %>% mutate(expression=firefly/renilla) Take all control conditions and calculate the average value df_norm <- df_4 %>% filter(condition == "-") %>% group_by(treatment1,treatment2) %>% summarise(mean=mean(expression)) `summarise()` has grouped output by 'treatment1'. You can override using the `.groups` argument. Combine the mean values (needed for normalization) values with the df_4 dataframe df_4 <- df_4 %>% full_join(df_norm, by=c("treatment1","treatment2")) %>% na.omit(condition) Calculate the Fold Change by normalizing all measurements against the control (-) df_4 <- df_4 %>% mutate(`Fold Change` = expression/mean) The result is a dataframe that holds all the necessary data: head(df_4) Wells condition treatment1 treatment2 column row firefly renilla expression 1 A01 - HEK - 1 A 2010 2391540 0.0008404626 2 B01 - HEK - 1 B 3210 2391639 0.0013421758 3 C01 - HEK - 1 C 1965 2390991 0.0008218350 4 D01 - HEK - 1 D 2381 2391774 0.0009954954 5 E01 - neuron - 1 E 1292 269021 0.0048025991 6 F01 - neuron - 1 F 991 268918 0.0036851382 mean Fold Change 1 0.0009999922 0.8404692 2 0.0009999922 1.3421863 3 0.0009999922 0.8218414 4 0.0009999922 0.9955032 5 0.0040858977 1.1754085 6 0.0040858977 0.9019164 The data is in the right shape now, so let’s save it: df_4 %>% write.csv("protocol_4.csv", row.names = FALSE) Based on the dataframe, we can create a plot with jittered dots that show the data: p <- ggplot(df_4, aes(x=condition, y=`Fold Change`)) + geom_jitter(width = 0.2, alpha=0.5, size=3) To splot the graphs based on treatment1 (vertical) and treatment2 (horizontal) we use the facet_grid() function: p <- p + facet_grid(treatment1~treatment2) We add a horizontal line for mean value: p <- p + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size=0.5) Add labels: p <- p + labs( title = "Effect of DNA sequences on reporter levels under different conditions", subtitle = "The expression level was determined by a dual luciferase assay\\n and the values were normalized to a control with no DNA sequence (-)", x = "DNA Sequence", y = "Fold change of the reporter relative to the control (-)", caption = "@joachimgoedhart\\n(based on data from Brandorff et al., DOI: 10.1101/2021.07.08.451595)", tag = "Protocol 4" ) Set the theme and font size: p <- p + theme_light(base_size = 14) Format the facet labels (strips) and the caption + subtitle p <- p + theme(strip.background = element_rect(fill="grey90", color="grey50"), strip.text = element_text(color="grey50"), plot.caption = element_text(color = "grey80"), plot.subtitle = element_text(color = "grey50", face = "italic"), #Remove the grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) Let’s look at the result: p To save the plot as a png file: png(file=paste0("Protocol_04.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.5 Protocol 5 - A map of amino acids This data visualization plots the position of amino acids in a given protein. It is inspired by figure 2A of the paper by Basu et al. (2020) Let’s load the tidyverse package: library(tidyverse) First, we define a vector with the 20 amino acids and the order in which we plot them. The amino acids are grouped as hydrophobic (G,A,V,C,P,I,L,M,F,W), hydrophilic (S,T,Y,N,Q), acidic (D,E) and basic (R,H,K). amino_acid_ordered <- strsplit("GAVCPILMFWSTYNQDERHK","") %>% unlist() amino_acid_ordered [1] "G" "A" "V" "C" "P" "I" "L" "M" "F" "W" "S" "T" "Y" "N" "Q" "D" "E" "R" "H" [20] "K" The protein sequence that we will use is the Homo sapiens Homeobox protein Hox-D13: protein <- c("MSRAGSWDMDGLRADGGGAGGAPASSSSSSVAAAAASGQCRGFLSAPVFAGTHSGRAAAA AAAAAAAAAAASGFAYPGTSERTGSSSSSSSSAVVAARPEAPPAKECPAPTPAAAAAAPP SAPALGYGYHFGNGYYSCRMSHGVGLQQNALKSSPHASLGGFPVEKYMDVSGLASSSVPA NEVPARAKEVSFYQGYTSPYQHVPGYIDMVSTFGSGEPRHEAYISMEGYQSWTLANGWNS QVYCTKDQPQGSHFWKSSFPGDVALNQPDMCVYRRGRKKRVPYTKLQLKELENEYAINKF INKDKRRRISAATNLSERQVTIWFQNRRVKDKKIVSKLKDTVS") The protein sequence may contain end-of-line characters “” after copy pasting and we need to remove these. The gsub() function can be used: gsub("\\n", "", protein) [1] "MSRAGSWDMDGLRADGGGAGGAPASSSSSSVAAAAASGQCRGFLSAPVFAGTHSGRAAAAAAAAAAAAAAASGFAYPGTSERTGSSSSSSSSAVVAARPEAPPAKECPAPTPAAAAAAPPSAPALGYGYHFGNGYYSCRMSHGVGLQQNALKSSPHASLGGFPVEKYMDVSGLASSSVPANEVPARAKEVSFYQGYTSPYQHVPGYIDMVSTFGSGEPRHEAYISMEGYQSWTLANGWNSQVYCTKDQPQGSHFWKSSFPGDVALNQPDMCVYRRGRKKRVPYTKLQLKELENEYAINKFINKDKRRRISAATNLSERQVTIWFQNRRVKDKKIVSKLKDTVS" But we can also use str_replace_all() from the {tidyverse} package: protein <- protein %>% str_replace_all("\\n", "") Next, the protein sequence is split into single characters and we assign this vector to aa: aa <- strsplit(protein, "") %>% unlist() We generate a dataframe with a column with the amino acids and a column that defines their position: df_5 <- data.frame(aa=aa, position=1:length(aa)) Now we reorder the data frame to the order of the amino acids that we defined earlier in the vector amino_acid_ordered: df_5 <- df_5 %>% mutate(aa = fct_relevel(aa, amino_acid_ordered)) The basic plot shows a black tile for each amino acid. Note that the y-axis order is defined by the vector amino_acid_ordered, but it needs to be reverted to order the amino acids from top to bottom along the y-axis (which is naturally starts at the bottom it corresponds to the origin). The data is in the right shape now, so let’s save it: df_5 %>% write.csv("protocol_5.csv", row.names = FALSE) p <- ggplot() + geom_tile(data=df_5, aes(x=position, y=aa)) + scale_y_discrete(limits = rev(amino_acid_ordered)) p Set the theme to classic, to get rid off the ‘frame’ around the plot and the grid. p <- p+theme_classic(base_size = 16) For each of the four classes of amino acids we can define a box with a color that indicates the class. For example, there are three basic residues that will have a rectangle filled with blue in the background. The amino acids are factors, but we need numbers to define the coordinates for the rectangle. In a plot with a factors (here on the y-axis) their position is defined by a (non visible) natural number. Therefore we can define a box with the function annotate() for the first residue with y-coordinates ymin=0.5 and ymax=1.5: p + annotate(geom = "rect", xmin = -Inf, ymin = 0.5, xmax = Inf, ymax=1.5, fill='blue', alpha=0.4) In this way, we define four colored rectangles that reflect the different amino acids categories; blue=basic, red=acidic, yellow=hydrophilic, grey=hydrophobic: p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 0.5, xmax = Inf, ymax=3.5, fill='blue', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 3.5, xmax = Inf, ymax=5.5, fill='red', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 5.5, xmax = Inf, ymax=10.5, fill='yellow', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 10.5, xmax = Inf, ymax=20.5, fill='black', alpha=0.15) Let’s look at the result: p Adjusting the axis labels and adding a title and caption: p <- p + labs( title = "Mapping the amino acid positions of HOXD13", subtitle = "shows a high abundance of alanines in the IDR", y = "Amino acid", caption = "@joachimgoedhart | based on data from Basu et al, DOI: 10.1016/j.cell.2020.04.018", tag = "Protocol 5" ) And a final tweak of the label style and location: p <- p + theme( plot.caption = element_text( color = "grey80", hjust = 1 )) In the original paper, a region of the protein is annotated as an ‘intrinsically disordered region’ abbreviated as IDR. Here, we we use the annotate() function to add a rectangle and a label to the top of the plot: p <- p + annotate("rect", xmin=0, xmax=118, ymin=21, ymax=22, fill='darkblue') + annotate("text", x=59, y=23, alpha=1, color='darkblue', size=4,label='IDR') p To avoid clipping of the new label by the subtitle of the plot: p <- p + coord_cartesian(clip = 'off') p The subtitle is quite close to the IDR label. Let’s give the subtitle a bit more room, by adding a margin at the bottom of the subtitle. This can be done with the theme() function to style the subtitle: p <- p + theme(plot.subtitle = element_text(margin = margin(b=20))) p Finally we can save the plot: png(file=paste0("Protocol_05.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.6 Protocol 6 - Heatmap style visualization of timelapse data Lineplots are typically used to plot data from timeseries (also known as longitudinal data). However, in case of many samples/objects, this may result in a cluttered data visualization. To solve this, the same data can be presented as a heatmap, where every row is an object and the response is coded as a color. A downside is that it is less quantitative as it is difficult to ‘read’ the numbers from this kind of visualization. Still, it is a powerful visualization to plot a lot of data and show its dynamics and heterogeneity. The data and visualization is originally published by Chavez-Abiega et al. (2021) The multipurpose {tidyverse} package is used for data wrangling and plotting: library(tidyverse) A CSV file with the data is loaded. Since the file is a couple of Megabytes, we use the faster fread() function from the package data.table: library(data.table) Attaching package: 'data.table' The following objects are masked from 'package:dplyr': between, first, last The following object is masked from 'package:purrr': transpose df_S1P <- data.table::fread("ERK_repsonse_to_S1P.csv") head(df_S1P) Time_in_min Ligand Unique_Object CN_ERK Slide 1: 2.5 S1P 100 0.3941 P1 2: 3.0 S1P 100 0.3921 P1 3: 3.5 S1P 100 0.3900 P1 4: 4.0 S1P 100 0.3880 P1 5: 4.5 S1P 100 0.3859 P1 6: 5.0 S1P 100 0.3839 P1 The column ‘CN_ERK’ has the data on the activity that we will plot over time. Each number in the ‘Unique_Object’ column reflects an individual cell measurement and so we can use that to group the measurements using group_by(Unique_Object). We subtract the average baseline activity from each trace by subtracting the data acquired at the first 5 timepoints: CN_ERK[1:5]. The data is stored in a new column with normalized ERK activity data ‘ERKn’: df_sub <- df_S1P %>% group_by(Unique_Object) %>% arrange(Time_in_min) %>% mutate(ERKn=CN_ERK-mean(CN_ERK[1:5])) %>% ungroup() Around Timepoint 23 (minutes), the ligand was added. To set this time point to zero, we subtract a value of 23 (minutes) from each point: df_sub$Time_in_min <- df_sub$Time_in_min-23 The column ‘Unique_Object’ that identifies the individual cells contains natural numbers, but these need to be treated as qualitative data. Therefore, we change the data type in this column to a factor with as.factor(): df_sub <- df_sub %>% mutate(Unique_Object=as.factor(Unique_Object)) To order objects, we need to order ‘Unique_Object’ according to something. That something can be the maximum value of the Erk activity: df_sub <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, max)) Plot the data in heatmap style. We use theme_void here to focus only on the data and we will deal with styling of the axes and labels later: ggplot(df_sub, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + theme_void()+ scale_fill_viridis_c() Can we also sort the data based on something else? Definitely, but it requires a bit of understanding of functions. Previously, we used the maximum value. This is defined by the function max, which takes the maxium value from a vector of numbers. Let’s look at an artificial example: x <- c(1,3,4,5,6,7,9) max(x) [1] 9 Other functions that take a vector as input and return a single value as output can be used. Other existing examples are mean(), sum() and min(). We can also define a function: second <- function(x) {x[2]} second(x) [1] 3 one_but_last <- function(x) {x[length(x)-1]} one_but_last(x) [1] 7 We can use the new function to sort the dataframe: df_sub <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, one_but_last)) ggplot(df_sub, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + theme_void()+ scale_fill_viridis_c() If we want to sort on the sum of the top five values we can define a function: top_five <- function(x) {sum(tail(sort(x),5))} But we can also directly implement the function in the fct_reorder() function: df_6 <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, function(x) {sum(tail(sort(x),5))})) Let’s save this data: df_6 %>% write.csv("protocol_6.csv", row.names=FALSE) p <- ggplot(df_6, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + # scale_x_continuous(breaks=seq(0,60, by=15), labels=seq(0,60, by=15), limits=c(-8,60)) + scale_fill_viridis_c(na.value="black", limits = range(-0.1,1.5)) Let’s look at the plot p Add labels: p <- p + labs( title = "ERK activity is increased by S1P", subtitle = "and varies strongly between cells", x = "Time after addition of S1P (min)", y = "Cells sorted according to response", caption = "@joachimgoedhart | data from Chavez-Abiega, DOI: 10.1101/2021.07.27.453948", tag = "Protocol 6", fill= "ERK C/N ratio" ) The theme_void() would be close to what we want as a theme, but I prefer to start from theme_light and remove the redundant features (grids and y-axis labels): p <- p + theme_light(base_size = 14) + theme(plot.caption = element_text(color = "grey80", hjust = 2.0), plot.title = element_text(hjust = 0.1, margin = margin(t=10)), plot.subtitle = element_text(hjust = 0.1, margin = margin(t=2, b=5)), # Remove background panel.background = element_blank(), # Remove borders panel.border = element_blank(), # Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), # Remove text of the y-axis axis.text.y = element_blank(), # Remove ticks on y-axis axis.ticks.y = element_blank(), # Remove label of y-axis axis.title.y = element_blank(), # Make x-axis ticks more pronounced axis.ticks = element_line(colour = "black") ) p The caption does not look good in this plot, but it has been optimized to look good in the saved PNG. To get a proper aligned caption in the Rmd you may need to optimize the hjust value in theme((plot.caption = element_text())) To save the plot as PNG: png(file=paste0("Protocol_06.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.7 Protocol 7 - Ridgeline plot In protocol 6 we have seen how time traces can be visualized with a heatmap style data visualization. The advantage is that huge amounts of data can be simultaneously visualized. However, it is difficult to relate the color to numbers. As such the color coded values in a heatmap give a qualitative view of heterogeneity. In this protocol, we use a method that allows more data than an ordinary lineplot, but keeps the advantage of this plot, i.e. allowing a quantitative comparison. To do this, an offset between curves is introduced. A package to this directly in ggplot2 is available ({ggridges}) but it may not work well when the values show a negative and positive deviation from baseline values (usually the baseline is zero). In addition, we have more flexibility (and insight) when we do this ourselves. Load the {tidyverse} package and the data from a CSV file: require(tidyverse) df1 <- read.csv("Rac_S1P.csv") head(df1) Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 Cell.6 1 0.0000000 1.0012160 1.0026460 1.0022090 0.9917870 0.9935569 0.9961453 2 0.1666667 0.9994997 0.9928106 0.9997658 0.9975348 1.0018910 1.0039790 3 0.3333333 0.9908362 0.9964057 0.9905094 0.9946743 0.9961497 0.9953369 4 0.5000000 0.9991967 0.9972504 0.9972806 1.0074250 1.0060510 1.0062390 5 0.6666667 1.0093450 1.0109910 1.0103590 1.0084080 1.0022130 0.9982496 6 0.8333333 0.9941078 0.9940830 0.9990720 1.0181230 1.0110220 1.0139400 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 Cell.13 1 0.9964277 1.0006770 0.9999106 1.0043270 1.0086590 1.0074670 0.9875549 2 1.0098780 1.0015050 1.0014380 0.9938114 0.9791933 0.9925425 1.0106440 3 0.9917276 1.0000020 0.9997350 1.0049370 1.0250660 1.0079290 1.0062720 4 1.0039710 1.0046840 0.9976190 0.9971925 1.0008340 0.9975954 1.0050230 5 0.9979655 0.9930890 1.0012990 0.9997435 0.9865567 0.9944269 0.9907017 6 1.0087770 0.9916067 1.0025310 0.9919835 0.9930975 1.0012420 1.0025800 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 0.9941667 0.9931722 0.9918481 0.9973316 0.9976466 0.9982940 0.9954924 2 1.0024420 0.9980425 0.9974822 0.9976164 0.9881339 1.0122250 1.0132220 3 1.0096800 1.0074450 1.0073690 0.9980090 0.9980346 0.9923310 0.9891400 4 1.0007800 0.9995486 1.0018860 1.0064760 1.0073410 0.9959588 0.9984370 5 0.9930816 1.0018040 1.0014300 1.0006490 1.0088410 1.0013600 1.0040700 6 1.0117190 1.0082190 1.0092750 1.0018410 0.9976196 1.0008680 1.0013100 Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 1 1.0024980 0.9986917 0.9987728 0.9988987 1.0019450 0.9954534 1.0025060 2 1.0022340 1.0023420 0.9963444 0.9969288 0.9990684 0.9973828 0.9944580 3 1.0003150 1.0014660 0.9985501 0.9983435 0.9944611 0.9987581 0.9935282 4 0.9969226 0.9956030 1.0020300 1.0063250 1.0036700 1.0056470 1.0065540 5 0.9980916 1.0018990 1.0042990 0.9995825 1.0009020 1.0028340 1.0031070 6 0.9993777 1.0041500 0.9984087 1.0016190 1.0007090 1.0022360 1.0007950 Cell.28 Cell.29 Cell.30 Cell.31 Cell.32 1 0.9957569 0.9852318 1.0007450 0.9927866 0.9871355 2 0.9952635 0.9931840 1.0030060 0.9977890 1.0028110 3 0.9976221 1.0010230 0.9998598 1.0029210 0.9985340 4 1.0068090 1.0139990 0.9968880 1.0026060 1.0039670 5 1.0046560 1.0070850 0.9995161 1.0039100 1.0076550 6 1.0073290 1.0128910 1.0000250 1.0025260 0.9998251 The data is not tidy, so it needs to be re-arranged: df_tidy <- pivot_longer(df1, cols = -c(Time), names_to = "Cell", values_to = "Activity") head(df_tidy) # A tibble: 6 × 3 Time Cell Activity <dbl> <chr> <dbl> 1 0 Cell.1 1.00 2 0 Cell.2 1.00 3 0 Cell.3 1.00 4 0 Cell.4 0.992 5 0 Cell.5 0.994 6 0 Cell.6 0.996 In the next step, we create a new dataframe ‘df_rank’ to order the traces. We group the data by ‘Cell’ and extract the data from a specified time window with filter(). The filtered data is used to integrate the activity by using the function sum(). This summed value is used to generate a rank, ranging from 0 to 1: df_rank <- df_tidy %>% group_by(Cell) %>% filter(Time>=2 & Time <=10) %>% summarise(amplitude=sum(Activity)) %>% mutate(rank=percent_rank(amplitude)) head(df_rank) # A tibble: 6 × 3 Cell amplitude rank <chr> <dbl> <dbl> 1 Cell.1 50.3 0.742 2 Cell.10 50.9 0.806 3 Cell.11 49.8 0.645 4 Cell.12 50.3 0.774 5 Cell.13 49.6 0.548 6 Cell.14 49.4 0.484 We can add the rank information from ‘df_rank’ to the ‘df_tidy’ dataframe: df_7 <- as.data.frame(full_join(df_tidy, df_rank,by="Cell")) This data is saved: df_7 %>% write.csv("protocol_7.csv", row.names=FALSE) Let’s make a lineplot of this data and use the rank to shift the data plotted on the y-axis: ggplot(df_7, aes(x=Time, y=Activity+(rank*1), group=Cell, height = rank)) + geom_line(alpha=0.5, size=0.5) We can use the rank to shift the plot also in the horizontal direction: p <- ggplot(df_7, aes(x=Time+(rank*10), y=(Activity+(rank*1)), group=Cell)) + geom_line(alpha=0.5, size=0.5) p Add labels: p <- p + labs( title = "Activities measured in single cells over time", subtitle = "Sorting of the cells is based on integrated activity", x = "Time [min]", y = "Activity [arbitrary units]", caption = "@joachimgoedhart | data from Reinhard et al; doi: 10.1091/mbc.E17-03-0136", tag = "Protocol 7" ) If we would like to use color, this would be a way to do that: p + geom_line(aes(color=as.factor(rank))) + theme(legend.position = "none") Although it looks flashy, we do not really need color here. So we stick to black and white and make some adjustments to the layout by tweaking the theme settings. To remove the grid and show the axis: p <- p + theme_classic(base_size = 16) p <- p + theme(panel.grid.major = element_blank(), plot.caption = element_text(color = "grey80"), panel.grid.minor = element_blank(), NULL) p To give it more of a 3D feel we can add a third axis by defining a line: p <- p + annotate(geom = "segment", x=0,y=1,xend=10,yend=2, size=1) The next step is to remove the original x-axis, which is a bit too long and also replace that with a line that runs until 20 (minutes): p <- p + theme(axis.line.x = element_blank(), axis.title.x = element_text(hjust = 0.3) ) + annotate(geom = "segment", x=0,y=1,xend=20,yend=1, size=1) p Finally, we can use scale_x_continuous() to improve two aspects of the x-axis. First, the labels run up to 30, but we can set the scale to 0-20 with breaks = c(0,20). Second, the default in ggplot is add a bit of margin to the plot, that’s why the x-axis does not touch the y-axis. This can be solved by using expand = c(0, 0): We can manually add two p <- p + scale_x_continuous(breaks = c(0,10,20), expand = c(0, 0)) p To save the plot as PNG: png(file=paste0("Protocol_07.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.8 Protocol 8 - Plotting data in a 96-wells layout This protocol displays data from a 96-wells plate in the same format as the plate. This data visualization of 96-well plate data is also used in the plotXpress app. We start by loading a package that we need: library(tidyverse) A good example of data wrangling related to 96-wells data is given in protocol 4. Here we start from the tidy data that was the result of data tiyding in the section Data in 96-wells format: df_8 <- read.csv("df_tidy_wells.csv") head(df_8) X column row Well Intensity 1 1 1 A A1 2010 2 2 1 B B1 3210 3 3 1 C C1 1965 4 4 1 D D1 2381 5 5 1 E E1 1292 6 6 1 F F1 991 We can construct a basic plot where each well is represented by a large dot and the color used to fill the dot represents the intensity. This is much like a heatmap, but it uses a dot instead of a tile: ggplot(data=df_8, aes(x=column, y=row)) + geom_point(aes(color=Intensity), size=10) There is a couple of things that need to be fixed. First, we invert the row names, to put the row ‘A’ at the top. In addition, the column names are depicted as factors (this can also be achieved by mutating the dataframe): p <- ggplot(data=df_8, aes(x=as.factor(column), y=fct_rev(row))) + geom_point(aes(color=Intensity), size=10) p Let’s change the color palette that displays intensity to viridis. The numbers in the legend are high and that is why they are difficult to read quickly. So we use the scales package to use the scientific notation: p <- p + scale_x_discrete(position = "top") + scale_color_viridis_c(label = scales::scientific) p In my opinion, the scientific notation does not work well, so let’s try to use commas as a thousands separator: p <- p + scale_x_discrete(position = "top") + scale_color_viridis_c(label = scales::comma) Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale. p This is a bit better, but the numbers need to be right aligned: p <- p + theme(legend.text.align = 1) p This looks better, now add the labels (and we skip the labels for the x- and y-axis): p <- p + labs( title = "Readings from a 96-wells plate", subtitle = NULL, x = NULL, y = NULL, caption = "\\n@joachimgoedhart\\nbased on data from Brandorff et al., DOI: 10.1101/2021.07.08.451595", color= 'Intensity [a.u.]', tag = "Protocol 8" ) p Set the theme and font size: p <- p + theme_light(base_size = 14) Note that this overrides any previously defined modifications of the theme() function, such as the alignment of the legend labels. So we need to define this again. p <- p + theme(legend.text.align = 1) We also adjust the theme settings for the other elements: p <- p + theme(plot.caption = element_text(color = "grey80"), plot.subtitle = element_text(color = "grey50", face = "italic"), #Remove the grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) Let’s look at the result: p To save the plot as a png file: png(file=paste0("Protocol_08.png"), width = 3000, height = 2000, units = "px", res = 400) p + coord_fixed() dev.off() quartz_off_screen 2 4.9 Protocol 9 - A dose response curve with fit In this protocol we visualize the data that was used to make a ‘dose reponse curve’. The data consists of some response that is measured at different concentrations of a compound that induces the effect (agonist). This is a typical experiment in pharmacology to understand the relation between the dose and the response. One of the relevant parameters is the ‘Half maximal effective concentration’ abbreviated as EC50. This is the concentration at which 50% of the maximal response is measured and we obtain this value by curve fitting. In this protocol we use data acquired from single cells from different biological replicates. We generate a ‘superplot’ (Lord et al., 2021) to distuinguish technical and sample replicates. More details about the experimental approach are published by Chavez-Abiega et al. (2022). We start by loading the {tidyverse} package: library(tidyverse) Read the data: df_DRC <- read.csv("DRC_Histamine.csv", stringsAsFactors = TRUE) head(df_DRC) X Unique_Unique_Object Experiment Aktnac ERKnac Condition Concen 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 The concentration is listed in the column ‘Concen’, the measured response is in the column ‘ERKnac’ and the column ‘Experiment’ identifies the replicates. Let’s rename the columns for easier identification of what they represent: df_DRC <- df_DRC %>% rename(Concentration=Concen, Response=ERKnac) head(df_DRC) X Unique_Unique_Object Experiment Aktnac Response Condition Concentration 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 To change the column ‘Experiment’ from text into a number that represents the replicate, we can convert it using as.numeric(). Since we need these numbers as qualitative data (a label), we convert the numbers to a factor with as.factor(): df_DRC <- df_DRC %>% mutate(Replicate=as.factor(as.integer(Experiment))) head(df_DRC) X Unique_Unique_Object Experiment Aktnac Response Condition Concentration 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 Replicate 1 1 2 1 3 1 4 1 5 1 6 1 The range of concentrations at which the compound is examined spans a few orders of magnitude and therefore a log scale is used to display the concentrations. The minimal response is usually measured at a concentration of 0, but the logarithm of 0 is undefined. Therefore, plotting 0 on a logscale will give an error. The logarithm of 0 can be approached by minus infinity. Therefore, we convert the concentration of 0 to a low value, in this case 0.01: df_DRC <- df_DRC %>% mutate(Concentration = ifelse((Concentration == 0), yes = 0.01, no = Concentration) ) Next we take the ‘Response’ and calculate the average per concentration and for each biological replicate and store that information in a new dataframe: df_summary <- df_DRC %>% group_by(Concentration, Replicate) %>% summarise(mean_Response=mean(Response)) `summarise()` has grouped output by 'Concentration'. You can override using the `.groups` argument. We can define a plot that shows the data with geom_jitter() and the average with a large dot with geom_point(). Each replicate has its own color and the data is plotted on a log scale with scale_x_log10(): p <- ggplot(data = df_DRC, aes(x = Concentration, y = Response)) + geom_jitter(aes(x = Concentration, y = Response, color=Replicate), width=0.2, size=2, shape=16, alpha=0.2) + geom_point(data=df_summary, aes(x = Concentration, y = mean_Response, fill=Replicate), size=8, shape=21, alpha=0.8) + scale_x_log10() p Adjusting the theme and the y-axis scale improves the plot: p <- p + ylim(-1,6) + theme_light(16) p Add labels: p <- p + labs( title = "Responses of individual cells to Histamine", x = "Histamine concentration [µM]", y = "Response [arbitrary units]", caption = "@joachimgoedhart\\nbased on data from Chavez-Abiega et al., DOI: 10.1242/jcs.259685", tag = "Protocol 9" ) + theme(plot.caption = element_text(color = "grey80")) And to label the different replicates with a colorblind friendly palette, we define a set of colors that were proposed by Paul Tol: https://personal.sron.nl/~pault/ Tol_bright <- c('66CCEE', '#BBBBBB', '#CCBB44','#AA3377','#228833', '#4477AA') To use these colors we define manual color scales for both ‘fill’ (used for geom_point()) and ‘color’ (used for geom_jitter()): p <- p + scale_fill_manual(values = Tol_bright) + scale_color_manual(values = Tol_bright) p The result is a dose response curve in which the replicates are clearly identified with colorblind friendly colors. The EC50 can be determined from fitting a curve. To this end, we use the function nls(), which needs an equation, the data and estimates of the values. It will perform a ‘nonlinear least squares’ optimization to find parameters for the equation that best fit with the data of ‘df_summary’. The parameters are ‘bot’, ‘top’, ‘EC50’ and ‘slope’: fit <- nls(mean_Response ~ top+(bot-top)/(1+(Concentration/EC50)^slope), data = df_summary, start=list(bot=-2, top=8, EC50=1, slope=1)) The result is stored in the object ‘fit’ and the parameters can be listed: coef(fit) bot top EC50 slope -0.1990747 3.2915665 0.4968078 0.7141988 To plot the fitted data, we use augment() function that is part of the {broom} package, which we need to load: library(broom) p + geom_line(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1) Instead of geom_lin() for plotting the fit, we can also use geom_smooth(): p <- p + geom_smooth(data = augment(fit), aes(x=Concentration,y=.fitted), color="black", size=1) p `geom_smooth()` using method = 'loess' and formula 'y ~ x' An alternative way to do the curve fit is provided through the {drc} package. To demonstrate this, we load the package and add the curve fit to the data: library(drc) Loading required package: MASS Attaching package: 'MASS' The following object is masked from 'package:dplyr': select 'drc' has been loaded. Please cite R and 'drc' if used for a publication, for references type 'citation()' and 'citation('drc')'. Attaching package: 'drc' The following objects are masked from 'package:stats': gaussian, getInitial p + geom_smooth(data=df_summary, aes(x = Concentration, y = mean_Response), color='blue', method = drm, method.args = list(fct = L.4()), se = FALSE) `geom_smooth()` using method = 'loess' and formula 'y ~ x' `geom_smooth()` using formula 'y ~ x' The {drc} package was used to fit the data in the paper by Chavez-Abiega et al. (2022). But the approach followed above with nls() is easier to adapt for data that requires other models for the fit. Finally, we can save the plot: png(file=paste0("Protocol_09.png"), width = 4000, height = 3000, units = "px", res = 400) p `geom_smooth()` using method = 'loess' and formula 'y ~ x' dev.off() quartz_off_screen 2 4.10 Protocol 10 - Plotting data that was harvestd with a Google form The goal of this script is to read data that was generated by a Google form, transform it into a tidy format and plot the data. The form contains data that is submitted by students after doing a course on cell biology. The data that is submitted are length measurements on cells and in the end, we will plot these date. First, we need the {tidyverse} package: library(tidyverse) The data from the Google form are stored in a Google sheet that was published on the web as a CSV. This was achieved by ‘File > Share > Publish to web’ and selecting to ‘Publish’ as ‘Comma-separated values’. After clicking on ‘Publish’ a link is generated that can be read as a csv, and any empty cells are converted to NA. Below is the outcommented code that loads the online google sheet. To make sure that this script works even when the google sheet is no longer active and to ensure a reproducible data visualization, I downloaded a snapshot (made on 21st of April, 2022) of the google sheet as a csv file and I’ll load that insetad: # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") df_sheet <- read.csv("20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) Tijdstempel Groep 1 <NA> <NA> 2 <NA> <NA> 3 <NA> <NA> 4 <NA> <NA> 5 <NA> <NA> 6 01/03/2021 15:42:23 B Resultaten.van.de.10.metingen..in.µm...van.de.celkleuring..methyleenblauw. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 71.2, 50.7, 51.0 Resultaten.van.de.10.metingen..in.µm...van.de.kernkleuring..DAPI. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.9, 11.7, 13.2 There are a number of issues with this data. The first 5 rows are empty. I deleted the values in these rows, since they were dummy values from testing the form. Let’s remove rows without data: df_sheet <- df_sheet %>% na.omit() The header names are still in the original language (Dutch) and the third and fourth header names with the relevant data are very long. Let’s change the names: colnames(df_sheet) <- c("Timestamp", "Group", "Cell", "Nucleus") All the length measurements are distributed over two columns, let’s make it tidy and move it to one column: df_tidy <- pivot_longer( df_sheet, cols = -c("Timestamp", "Group"), names_to = "Sample", values_to = "Size" ) head(df_tidy) # A tibble: 6 × 4 Timestamp Group Sample Size <chr> <chr> <chr> <chr> 1 01/03/2021 15:42:23 B Cell 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 7… 2 01/03/2021 15:42:23 B Nucleus 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.… 3 01/03/2021 23:50:53 A Cell 57.7, 64.9, 44.8, 60.8, 46.8, 70.1, 67.8, 7… 4 01/03/2021 23:50:53 A Nucleus 9.6, 7.1, 8.7, 9.5, 8.1, 6, 8.3, 5.5, 7.8, … 5 02/03/2021 17:09:52 B Cell 14.839,17.578,9.054,16.218,14.724,12.410,14… 6 02/03/2021 17:09:52 B Nucleus 2.792,1.819,2.275,2.426,2.263,2.159,3.056,2… The column with measurements contains up to 10 length measurements. The values are separated by a comma and often a space. First, the space is removed and then each row is split into multiple rows, where each row has a single measurement. The comma is used to separate the values: df_tidy <- df_tidy %>% mutate(Size = gsub(" ", "", Size)) %>% separate_rows(Size, sep=",") The ‘Size’ column values are converted to the class numeric. The advantage is that anything that is not a number will be converted to NA. These non-numeric data can stem from incorrectly enetered data. Examples of these incorrect data are numbers with units or with wrong separators. df_tidy <- df_tidy %>% mutate(Size = as.numeric(Size)) Finally, we can filter any values that fall outside the range of expected values (and this will also remove the cells with NA): df_size <- df_tidy %>% filter(Size>0 & Size<1000) head(df_size) # A tibble: 6 × 4 Timestamp Group Sample Size <chr> <chr> <chr> <dbl> 1 01/03/2021 15:42:23 B Cell 64.6 2 01/03/2021 15:42:23 B Cell 52.5 3 01/03/2021 15:42:23 B Cell 79.4 4 01/03/2021 15:42:23 B Cell 48.4 5 01/03/2021 15:42:23 B Cell 66 6 01/03/2021 15:42:23 B Cell 64.4 The dataframe is cleaned and tidy and so it is ready for visualization. The primary information is the distribution of size measurements for the measurements of cells and cell nuclei. This can be achieved by using geom_density(). Given the range of sizes, it makes sense to use a log10 scale for the x-axis: ggplot(df_size, aes(x=Size, fill=Sample))+geom_density(alpha=.8) + scale_x_log10() The geom_density() produces a smooth distribution of the data. I actually prefer to see the real data and that’s why we turn to geom_histogram. I also will split the data according to the sample and groups and this can be achieved with facet_grid(). Here, we use the labeller() function to combine the column name ‘Group’ with the the factor it presents, as this makes it easier to understand what is plotted: ggplot(df_size, aes(x=Size, fill=Sample))+geom_histogram(alpha=.8) + facet_grid(Sample~Group, labeller = labeller(Group=label_both)) + scale_x_log10() `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. The use of color is redundant, since the data is split in Cell and Nucleus anyway, so we remove that. The difference between groups is not large and for the final data visualization I chose to combine the data for all the groups: p <- ggplot(df_size, aes(x=Size)) + geom_histogram(alpha=.5, bins=50) + facet_grid(~Sample) + annotation_logticks(sides="b", outside = TRUE) + scale_x_log10() p The data is presented in a nice way now, and we can improve the axis labels and add a title and caption: p <- p + labs( title = "Distribution of size measurements", subtitle = "Sizes of human cells and nuclei of cells", x = "Size [µm] - log scale", y = "Count", caption = "@joachimgoedhart | data submitted by 4 groups of students", tag = "Protocol 10" ) Optimizing the layout: p <- #Set text size p + theme_light(base_size = 16) + # Change the color and position of the caption theme( plot.caption = element_text( color = "grey80", hjust = 1 ) ) p This looks very decent. But we can edit change the x-axis to display logarithmic space ticks. In addition, I’d like the bars of the histogram to start from the axis and not ‘float’ as in the graph above: p <- p + #Force the y-axis to start at zero scale_y_continuous(expand = c(0, NA), limits = c(0,200)) + #Apply a logarithmic scale to the x-axis and set the numbers for the scale scale_x_log10(breaks = c(1,10,100), limits = c(.5,200)) + #Remove minor gridlines theme(panel.grid.minor = element_blank()) + #Add ticks to the bottom, outside annotation_logticks(sides="b", outside = TRUE) + #Give a little more space to the log-ticks by adding margin to the top of the x-axis text theme(axis.text.x = element_text(margin = margin(t=8))) + #Needed to see the tcks outside the plot panel coord_cartesian(clip = "off") Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. p To save the plot as a PNG file: png(file=paste0("Protocol_10.png"), width = 3000, height = 2000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.11 Protocol 11 - Plotting time data from a Google form The goal of this script is to read data that was generated by a Google form and visualize the distribution of the hours at which the form was submitted. We need the tidyverse package: library(tidyverse) The data from the Google form are stored in a sheet that was published on the web as a CSV. This was achieved by ‘File > Share > Publish to web’ and selecting to ‘Publish’ as ‘Comma-separated values’. After clicking on ‘Publish’ a link is generated that can be read as a csv. Any empty cells are converted to NA. As explained in protocol 10, we will load a snapshot of the sheet (the code to read the actual sheet is outcommented here): # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") df_sheet <- read.csv("20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) Tijdstempel Groep 1 <NA> <NA> 2 <NA> <NA> 3 <NA> <NA> 4 <NA> <NA> 5 <NA> <NA> 6 01/03/2021 15:42:23 B Resultaten.van.de.10.metingen..in.µm...van.de.celkleuring..methyleenblauw. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 71.2, 50.7, 51.0 Resultaten.van.de.10.metingen..in.µm...van.de.kernkleuring..DAPI. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.9, 11.7, 13.2 Here, we are only interested in the first column with the time data. So we select that column and replace the dutch column name by ‘Timestamp’: df_sheet <- df_sheet %>% dplyr::select("Timestamp"=1) %>% na.omit() We can seperate the Timestamp column in date and time: df_tidy <- df_sheet %>% separate('Timestamp', c("Date", "Time"), sep=" ") Correct handling of date and time data is quite challenging and a topic on its own. The code to format the ‘Date’ column as date (note that we need a capital Y as the year is presented in 4 digits) would be: df_tidy %>% mutate(Date=as.Date(Date, "%d/%m/%Y")) %>% head() Date Time 6 2021-03-01 15:42:23 7 2021-03-01 23:50:53 8 2021-03-02 17:09:52 9 2021-03-03 09:30:43 10 2021-03-03 16:21:32 11 2021-03-03 21:00:23 Here, we avoid the Date format and use the individual numbers. The ‘Date’ column is seperated into three columns for year, month and day. The ‘Time’ column can be split into hour, minute and second: df_tidy <- df_tidy %>% separate('Date', c("day", "month", "year"), sep="/", convert = TRUE) %>% separate('Time', c("hour", "min", "sec"), sep=":", convert = TRUE) head(df_tidy) day month year hour min sec 6 1 3 2021 15 42 23 7 1 3 2021 23 50 53 8 2 3 2021 17 9 52 9 3 3 2021 9 30 43 10 3 3 2021 16 21 32 11 3 3 2021 21 0 23 Note that we use convert = TRUE to ensure that the data is treated as numbers (not as characters). We can use the data to check at what time the data was submitted: ggplot(df_tidy, aes(x=hour))+geom_histogram(alpha=.8) `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. The default number of ‘bins’ is 30, but it makes more sense to use 24 here as there are 24 hours in a day: ggplot(df_tidy, aes(x=hour))+geom_histogram(bins = 24, alpha=.8) Since ‘hour’ is a number that cycles, with 0 followed by 23, it is nice to connect the data from 23 with 0 and we can do that with coord_polar(): ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8) + coord_polar() + scale_x_continuous(breaks=seq(0, 24, by=2)) To center the plot at 0, we need to rotate it by -7.5 degrees (1 hour equal 15 degrees). We can use the start option within coord_polar(), but it only accepts ‘radians’. To convert degrees to radians the value is multiplied by pi/180: ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8) + coord_polar(start = (-7.5*pi/180)) + scale_x_continuous(breaks=seq(0, 24, by=3)) The plot can be rotated to center it around 15h as it reflects the middle of the afternoon, when most activity takes place. To achieve this, we need to shift the start another 15*15 degrees: p <- ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8, color='black') + coord_polar(start = (-7.5 - 15*15)*pi/180) + scale_x_continuous(breaks=seq(0, 24, by=3)) p This looks good, let’s first improve on the layout by changing the theme. I do not like the grey background, so any theme with a white background is an improvement, for instance theme_minimal(): p + theme_minimal() I do not like the labels that show the count. Since it is clear that the length of the bar indicates an amount and since the absolute amount is not so interesting, these labels can be removed. The labels for the hours are helpful and their sice needs to be increased. Finally, I do not like the grid running through the numbers. I did not find a way in the theme setting to get rid of this, so we define the grid ourselves by using repetitive horizontal and vertical lines: p <- p + geom_hline(yintercept = c(2,4,6,8), colour = "grey90", size = 0.5) + geom_vline(xintercept = seq(0, 21, by=3), colour = "grey90", size = 0.5) + theme_minimal(base_size = 16) + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), axis.text.y = element_blank() ) p The grid looks good, but the bars have to be on top of this layer, so we redefine the plot in the correct order: p <- ggplot(df_tidy, aes(x=hour)) + geom_hline(yintercept = c(2,4,6,8), colour = "grey90", size = 0.5) + geom_vline(xintercept = seq(0, 21, by=3), colour = "grey90", size = 0.5) + geom_histogram(bins = 24, alpha=.8, color='black') + coord_polar(start = (-7.5 - 15*15)*pi/180) + scale_x_continuous(breaks=seq(0, 24, by=3)) + theme_minimal(base_size = 16) + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), axis.text.y = element_blank() ) + labs( title = "Counting the hours...", subtitle = "that a Google form was submitted", x = "", y = "", caption = "@joachimgoedhart | data submitted by students", tag = "Protocol 11" ) + theme(plot.caption = element_text(color = "grey80", hjust = 1)) p A centered title and subtitle looks nice on this plot: p <- p + theme( plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5) ) p To save the plot as a PNG file: png(file=paste0("Protocol_11.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.12 Protocol 12 - Plotting grouped data This protocol explains how data can be plotted side-by-side. It is a remake of a figure that was published by de Man et al. (2021). The source data is published with the paper and can be downloaded. Next to the tidyverse package we need readxl to import the excel file: library(tidyverse) library(readr) Next, we download the xls file from the url, store it as a (temporary) file, and use read_excel() to import the data (note that unlike the read.csv() we cannot directly download the data from a url): url_xls <- "https://cdn.elifesciences.org/articles/66440/elife-66440-fig5-data1-v2.xlsx" # file_xls <- basename(url_xls) download.file(url = url_xls, destfile = 'temp_file') df_download <- readxl::read_excel('temp_file') New names: • `` -> `...2` • `` -> `...3` • `` -> `...4` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` Inspection of the dataframe shows that we can remove the first 11 rows and that the name of the columns is in the 12th row. First we fix the column names: colnames(df_download) <- df_download %>% slice(12) Then, we can remove the first 12 frames and select only the first 3 columns: df_tidy <- df_download %>% slice(-(1:12)) %>% dplyr::select(1:3) head(df_tidy) # A tibble: 6 × 3 Sample `Measurement date` `Total SGFP2-CTNNB1 concentration` <chr> <chr> <chr> 1 B10 WNT3A c1 cyto 180926 250.188126820392 2 B10 WNT3A c2 cyto 180926 243.40459000116601 3 B10 WNT3A c3 cyto 180926 233.140028430596 4 B10 WNT3A c3 nucleus 180926 377.33830720940603 5 B10 WNT3A c4 cyto 180926 256.42702997341098 6 B10 WNT3A c4 nucleus 180926 379.44318769572499 The third column, containing the measurement data has the class <chr>, but the correct class is numeric. Here, we mutate the column and rename it. To keep the data that is untouched, we add .keep = \"unused\": df_tidy <- df_tidy %>% mutate(`SGFP2-CTNNB1` = as.numeric(`Total SGFP2-CTNNB1 concentration`), .keep = "unused") Finally, we need to separate the first column, since it contains the relevant data on the conditions and the grouping of the data: df_tidy <- df_tidy %>% separate(`Sample`, c("Celltype", "ligand", "number", "compartment"), sep=" ") head(df_tidy) # A tibble: 6 × 6 Celltype ligand number compartment `Measurement date` `SGFP2-CTNNB1` <chr> <chr> <chr> <chr> <chr> <dbl> 1 B10 WNT3A c1 cyto 180926 250. 2 B10 WNT3A c2 cyto 180926 243. 3 B10 WNT3A c3 cyto 180926 233. 4 B10 WNT3A c3 nucleus 180926 377. 5 B10 WNT3A c4 cyto 180926 256. 6 B10 WNT3A c4 nucleus 180926 379. There are two compartments (nucleus and cytoplasm) and two ligands (BSA as a control and WNT3A). To avoid abbreviated labels in the plot, we will rename the ‘cyto’ condition: df_tidy <- df_tidy %>% mutate(compartment = case_when(compartment == "cyto" ~ "cytoplasm", TRUE ~ compartment) ) head(df_tidy) # A tibble: 6 × 6 Celltype ligand number compartment `Measurement date` `SGFP2-CTNNB1` <chr> <chr> <chr> <chr> <chr> <dbl> 1 B10 WNT3A c1 cytoplasm 180926 250. 2 B10 WNT3A c2 cytoplasm 180926 243. 3 B10 WNT3A c3 cytoplasm 180926 233. 4 B10 WNT3A c3 nucleus 180926 377. 5 B10 WNT3A c4 cytoplasm 180926 256. 6 B10 WNT3A c4 nucleus 180926 379. This data can be plotted in a number of different ways. The first way is by comparing the different compartments for each ligand: ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = compartment)) + geom_boxplot(outlier.color = NA) + geom_jitter() However, in the original figure, the data is split between the two compartments and the two ligands are plotted next to eachother: ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = compartment)) + geom_boxplot(outlier.color = NA) + geom_jitter() + facet_wrap(~compartment) This is close to the original figure, but the colors in that figure reflect the ligand, not the compartment: p <- ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = ligand)) + geom_boxplot(outlier.color = NA) + geom_jitter() + facet_wrap(~compartment) p This plot looks good. Now let’s improve the theme. p <- p + theme_linedraw(base_size = 16) + theme(panel.spacing = unit(0, "points")) p The theme is pretty nice, but the black strips are very distracting. Let’s change the fill and color (border) of the strips and change the text to black. At the same time, we remove the grid and the legend: p <- p + theme(strip.background = element_rect(fill=NA, color="black", size = .5), strip.text = element_text(color = 'black'), panel.grid = element_blank(), legend.position = "none", plot.caption = element_text(color='grey80') ) p Finally, we fix the labels: p <- p + labs(x="", y="Concentration [nM]", title = "Total SGFP2-CTNNB1", caption = "@joachimgoedhart | based on data from de Man et al., DOI: 10.7554/eLife.66440", tag = "Protocol 12" ) p To save the plot as a PNG file: png(file=paste0("Protocol_12.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 In progress This chapter is ‘in progress’ and I plan to add more protocols in the future. "],["questions-and-answers.html", "Chapter 5 Questions and Answers", " Chapter 5 Questions and Answers A list of questions that may arise during the use of R and their answers. When you have questions that remain unanswered, feel free to reach out! What is the difference between a data.frame and a tibble? Both are objects that hold data. The data.frame is the structure supported by basic R and the tibble is an extended variant that is supported by the tidyverse package. Dependig on the function that is used to load data, read.csv() from base R or read_csv() from the tidyverse, the data will be loaded in a data.frame or tibble, respectively. It is possible to convert a classic data.frame to a tibble (which requires the tidyverse pakcage): df <- as_tibble(mtcars) class(df) [1] "tbl_df" "tbl" "data.frame" And to convert a tibble to a data.frame: df <- as.data.frame(df) class(df) [1] "data.frame" What’s up with spaces in variable names and in files names? Spaces are used to separate words (as in this line). When a space would be used between two words, these would be treated as separate entities. Avoiding spaces in filenames has a more technical background. Most filesystems currently accept spaces, but some systems do not. To increase compatibility across systems it is a good habit to use_underscores_instead. What are the rules for naming dataframes or variables? Do not use spaces, stick to characters and numbers. Whenever a variable consists of multiple words, e.g. room temperature there are two options: Add an underscore as separator: room_temperature. Use the ‘camelCase’ notation: roomTemperature. Personally, I prefer an underscore and the abbreviation df for dataframe when multiple dataframes are generated, e.g. df_tidy or df_summary What is the difference between <- and = for assigning variables? R prefers the <- for the assignment of a value to a variable. In RStudio the shortcut is <alt>+<->. It really is a preference since both can be used: x <- 1 y = 2 x + y [1] 3 What does ‘NA’ mean in a dataframe? When no data is available, this is known as a ‘missing value’. In R this is indicated with NA for ‘Not Available’. Empty cells in a CSV file will be converted to NA when the file is loaded. Other characters that can be present in a file (especially xls files) are: “.” or “NaN” or “#N/A” or “#VALUE!”. To convert these strings to NA use: df <- read.csv('FPbase_Spectra.csv', na.strings=c(".", "NaN", "#N/A", "#VALUE!")) What is the beste way to type a ‘%>%’ operator? I prefer to literally type it. The shortcut that works in Rstudio is <shift>+<command>+<M> or <shift>+<control>+<M>. Where do I find the example data? The example data that is used in Chapter 2 and 3 is located on this github page: https://github.com/JoachimGoedhart/DataViz-protocols The data that is used for the protocols in Chapter 4 is located in the subdirectory /Protocols. Is there a way to re-use or adjust the protocols? Instead of copy-pasting and running the code line-by-line, you can download the R Markdown file (.Rmd) from the protocols folder in the Github repository. The R Markdown file (together with the data) can be used to replicate the protocol and to modify it. For more info on R Markdown, see https://rmarkdown.rstudio.com Which packages are included in the {tidyverse} package? You can find this out by first loading the package and then run tidyverse_packages() What is the difference between require() and library() for loading a package? Both functions can be used to load a package. The difference is that require() returns FALSE when the package does not exist and can be used to check whether a package was loaded: if (require("nonexistant") == FALSE) ("This packkage doesn't exist") Loading required package: nonexistant [1] "This packkage doesn't exist" Is it possible to have interactive file selection? In some cases it can be convenient to select a file by point-and-click, although this is not strictly reproducible. This example code shows how this can be achieved by using the function file.choose() inside a function for reading a csv file: df <- read.csv(file.choose(), header = TRUE) "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] +[["index.html", "DataViz protocols An introduction to data visualization protocols for wet lab scientists Preface", " DataViz protocols An introduction to data visualization protocols for wet lab scientists Joachim Goedhart 2022-10-25 Preface Experiments rely on step-by-step instructions that are detailed in protocols. These protocols, which are used in a wet lab, are similar to the instructions that are defined in scripts for data visualization. Although scientists are familiar with protocols for experiments, they are usually less familiar with code or scripts for handling experimental data. Given the similarities between experimental methods and computer instructions, it should be within reach for experimental scientists to add automated, reproducible data processing and visualization to their toolkit. This book aims to lower the barrier for wet lab scientists to use R and ggplot2 for data visualization. First, by explaining some basic principles in data processing and visualization. Second, by providing example protocols, which can be applied to your own data, and I hope that the protocols serve as inspiration and a starting point for new and improved protocols. Data visualization is the process of transforming information into a picture. The picture that reflects the information, helps humans to understand and interpret the data. As such, data visualization is an important step in the analysis of experimental data and it is key for interpretation of results. Moreover, proper data visualization is important for the communication about experiments and research in presentations and publications. Data visualization usually requires refinement of the data, e.g. reshaping or processing. Therefore, the translation of data into a visualization is a multistep process. This process can be automated by defining the steps in a script for a software application. A script is a set of instructions in a language that both humans and computers can understand. Using a script can make data analysis and visualization faster, robust against errors and reproducible. As it becomes easier and cheaper to gather data, it becomes more important to use automated analyses. Finally, scripts make the processing transparent when the scripts are shared or published. R is a very popular programming language for all things related to data. It is freely available, open-source and there is a large community of active users. In addition, it fulfills a need for reproducible, automated data analysis. And lastly, with the ggplot2 extension, it is possible to generate state-of-the-art data visualizations. There are many great resources out there (that is also the reason I came this far) and below I list the specifics of this resource. First, there is a strict focus on R. All examples use R for all steps. Second, the datasets that are used are realistic and represent data that you may have. Several datasets that are used come from actual experimental data gathered in a wet lab. By using real data, specific issues that may not be treated elsewhere are encountered, discussed and solved. One of the reasons is that R requires a specific data format (detailed in chapter 2 Reading and Reshaping data) before the data can be visualized. It is key to understand how experimental data should be processed and prepared in a way that it can be analyzed and visualized. As the required format is usually unfamiliar to wet lab scientists, I provide several examples of how to do this. Third, since details determine successful use of R, I will go into detail whenever necessary. Examples of details include the use of spaces in column names, reading files with missing values, or optimizing the position of a label in a data visualization. Finally, modern analysis and visualization methods are treated and since the book is in a digital, online format it will be adjusted when new methods are introduced. An example of a recently introduced data visualization is the Superplot, which is the result of Protocol 2. Part of this work has been published as blogs on The Node and the enthusiastic response encouraged me to create a more structured and complete resource. This does not at all imply that this document needs to be read in a structured manner. If you are totally new to R it makes sense to first read the chapter Getting started with R which treats some of the essential basics. On the other hand, if you are familiar with R, you may be interested in the chapters on Reading and Reshaping data or Visualizing data. Finally, masters in R/ggplot2 may jump right to the Complete protocols. This final part brings all the ingredients of the preceding chapters together. Each protocol starts with raw data and shows all the steps that lead to a publication quality plot. I hope that you’ll find this book useful and that it may provide a solid foundation for anyone that wants to use R for the analysis and visualization of scientific data that comes from a wetlab. I look forward to seeing the results on twitter (feel free to mention me: @joachimgoedhart), in meetings, in preprints or in peer reviewed publications. A toast Cheers to all the kind people that helped me to get started with R, answered my questions, provided feedback on code and data visualizations, and helped me to troubleshoot scripts. Also thanks to all co-workers for sharing data and the helpful discussions. Finally, twitter is a huge source of inspiration, a magnificent playground, and an ideal place to meet people, discuss, get feedback or just hang out and I thank anyone I interact(ed) with! This work work was improved by specific comments from; Daniel C. de la Fuente (@DanCF93) How to cite Goedhart, J. (2022) DataViz protocols - An introduction to data visualization protocols for wet lab scientists, doi: 10.5281/zenodo.6457003 "],["getting-started.html", "Chapter 1 Getting started with R 1.1 Running R 1.2 Using the command line 1.3 ?Help 1.4 Installing packages 1.5 Multiline code", " Chapter 1 Getting started with R There is a lot of great material out there to get you started with R. I enjoyed swirl, which teaches basic R, in R. Whatever you choose, it is probably a good idea to familiarize yourself to some extent with basic R. Below, I only treat some of the basic stuff that is needed to run the code that is presented in the other chapters. 1.1 Running R R is free and it is available for many different platforms. You can run plain R, run it from RStudio Desktop or even from a browser. I prefer Rstudio and the instructions are based on Rstudio as well. When you start Rstudio, you see a couple of windows, including a ‘Console’. This is the place where you can type your commands for R. 1.2 Using the command line A classic in coding language is to print ‘hello world’. To do this, you need to type this piece of code (followed by the enter key) in the console: print('hello world') The result, printed below the code in the console is: [1] \"hello world\" In this document the input and output is shown as grey boxes. The first grey box represents the input and, if there is any output, the second grey box shows the output, for example: print('hello world') [1] "hello world" It is possible to copy the code from the first box. When you move your cursor to the upper left corner of the box a copy icon will appear. If you click on the icon, the code is copied. Not every piece of code results in a visible output, for instance when I assign a value to the variable x: x <- 1 To show the value of a variable as output, type its name: x [1] 1 R comes with datasets. Although these datasets are not so relevant for us, they are often used to demonstrate functions in R. One of these datasets is mtcars and we can use the head() function to check the first lines: head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 1.3 ?Help If you need help with a specific function, you may look at the documentation by typing a question mark followed by the function: ?head() However, I usually find myself googling instead of reading the documentation. The result is often a website where the correct use is explained by an example. It also make sense to experiment. Systematically changing variables or options (or outcommenting lines of code, see below) will teach you the logic behind a function or operation. Finally, there may be some answers in the chapter Questions and Answers 1.4 Installing packages R comes with a lot of commands and functions, but we often need to load additional ‘packages’ to add functionality. The most important one that we use here is the {ggplot2} package that we use for the data visualizations. The package can be activated with the function require() or library(): library("ggplot2") The {tidyverse} package is very versatile and is a superpackage that hold several packages (including {ggplot2}). Loading the {tidyverse} package is like equipping R with superpowers. Often it is sufficient to load the {tidyverse} package. The first time, the package has to be downloaded and installed. This handy piece of code checks whether the {tidyverse} package is available, downloads it if necessary and than activates it: if (!require(tidyverse)) { install.packages("tidyverse") require(tidyverse) } The output in the console depends on the packages that are installed and activated. For some specific functions, other packages are required, and these will be mentioned whenever they are used. 1.5 Multiline code The tidyverse package introduces a so-called pipe operator %>% which we will use a lot. This operator is useful for stringing multiple functions together. An example is given below, which reads as ‘take the mtcars dataset and next use the head() function’. mtcars %>% head() mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 Also for the plots that are generated with ggplot(), several functions can be added and these reflects different layers in the plot. However, in case of ggplot the layers are combined by a +: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() It is important to end each line with a +, as it indicates that the code continues on the next line. This will result in a warning message: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() The last line should not end with a plus. A trick that I use a lot, is using NULL on the last line of the code: ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_line() + NULL The advantage is that it is easy to deactivate a line by placing a hashtag in front of it (without the need to remove the +). The hashtag tells R to treat that line as a comment and not as code: ggplot(mtcars, aes(wt, mpg)) + geom_point() + # geom_line() + NULL This strategy is called ‘commenting out’ and is very useful to examine the effect of a line of code. For plots, it works very well in combination with NULL on the last line. "],["read-and-reshape.html", "Chapter 2 Reading and reshaping data 2.1 Introduction 2.2 Types of data 2.3 Reading data 2.4 Reshaping data", " Chapter 2 Reading and reshaping data 2.1 Introduction Experimental data can be recorded and stored in different ways. Anything that is not digital (e.g. notes in an physical labbook) has to be converted, before it can be used in a computer. Nowadays, most information is already in a digital format and stored in a file. This can be a text file, an excel file, or a file generated by a piece of equipment. In R, the main structure for storing and processing data is a ‘dataframe’ (a modernized version of the dataframe is a ‘tibble’, which is available when the tidyverse package is used). The dataset mtcars that comes with R is a dataframe. We can check the type of a structure or variable by using the function class(). This is a very helpful function to learn about the class of an object: class(mtcars) [1] "data.frame" The dataframe itself can be printed by just typing its name. To look only at the first rows we can use the function head(): head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 When we read experimental data from a file, this implies that we transfer the information to a dataframe in R. A dataframe can hold several types of data. Let’s first look at what different types of data you may encounter. 2.2 Types of data All the information that is recorded during an experiment can be considered as data. Details of the experimental approach or setup are called metadata, and the data that is measured is the raw data. Data visualization primarily deals with the raw, measured data. Yet, adding data on the experimental design or other types of metadata can be important for the interpretation of the data. The raw data mostly consist of numbers, but these are often accompanied by labels for experimental conditions or to identify objects. All this information is data, but they are clearly of different types. Let’s have a look at the most common types of data. Measurements usually result in quantitative data consisting of numbers. For instance when an optical density is measured with a spectrophotometer or when temperature is determined with a thermometer. This kind of data is called quantitative and continuous data, since it can have any number ranging from minus to plus infinity. Another type of quantitive data is quantitative and discrete data and it consists only of natural numbers. An example is the number of colonies on an agar plate or the number of replicates. There is also data that cannot be expressed in numbers and we call that qualitative data. For instance different experimental categories, e.g. ‘control’ and ‘treated’. This is also known as nominal data (ordinal data is not treated as it is not used in this book). It is important to make the distinction between different types of data and tell R how to treat the data. In some cases a number stored in a file can be a category and it is important to treat the number as a category and not as quantitative data. We will see that R stores information about the type of data in the example below. The variable x to which we assigned a value of 1 is: x <- 1 class(x) [1] "numeric" We can convert this to a ‘factor’, which means that it is no longer a number but qualitative data: x <- as.factor(x) class(x) [1] "factor" And therefore, this will give an error: x + 1 [1] NA When we convert it back to a number, it works: as.numeric(x) + 1 [1] 2 This simple example illustrates the difference between quantitative and qualitative data and it shows that we can change the data type in R. 2.3 Reading data Reading, or loading data is the transfer of information from a file to the memory of R where it is stored as a dataframe. Rstudio supports ‘point-and-click’ loading of data from its menu (File > Import Dataset > …). This is a convenient way of loading data. Since the aim is to perform all steps in a script, including data loading, I’ll explain how functions are used to load data from the console. 2.3.1 Loading data from a text or csv file Before we can read the file, we need to make sure that we can locate the file. In RStudio you can select the directory (folder) from the menu: Session > Set Working Directory > Choose Directory… If you are running an R script and the data is in the same directory as the script, you can go to the menu of Rstudio and select: Session > Set Working Directory > To Source File Location When the directory is properly set, you can read the file. A common file format is the ‘comma separated values’ or CSV format. Here we load a CSV file that was obtained from fpbase.org and contains the excitation and emission data of Green Fluorescent Protein. This file and all other example data are available at github: https://github.com/JoachimGoedhart/DataViz-protocols The function read_csv() is used to read the file and the data is assigned to a dataframe called ‘df’: df <- read.csv('FPbase_Spectra.csv') To check whether the loading was successful, we can look at the first lines of the dataframe with the function head(): head(df) Wavelength mEGFP.EM mEGFP.EX 1 300 NA 0.0962 2 301 NA 0.0872 3 302 NA 0.0801 4 303 NA 0.0739 5 304 NA 0.0675 6 305 NA 0.0612 This data has several columns, each containing quantitative data. Empty cells that do not have any data will be displayed as ‘NA’. Note that this is different from ‘0’. The ‘delimiter’ of a file is a character that separates the different fields of data. In a CSV file, as the name implies, this is a comma. However, other characters such as semicolons or tabs are often used as delimiters in text files. The function ‘read.delim()’ can be used to load a text file with a delimiter that can be specified, and therefore this function is more flexible for loading of data. For the CSV file, it would be used like this: df <- read.delim('FPbase_Spectra.csv', sep = ",") 2.3.2 Loading data from a URL When the CSV file is available online, e.g. in a data repository or on Github, it can be loaded by providng the URL: df <- read.csv('https://zenodo.org/record/2545922/files/FRET-efficiency_mTq2.csv') head(df) EGFP mNeonG Clover mKOkappa mOrange2 mScarlet.I mRuby2 TagRFP.T 1 46.25865 61.27913 52.85122 47.28077 25.70513 36.03078 51.68192 12.39361 2 46.48604 60.97392 54.05560 48.42123 26.43752 34.93961 33.75286 12.59682 3 46.66348 61.27877 48.93475 44.93190 24.47023 25.38569 41.93491 14.03628 4 46.30399 60.80149 48.95284 45.47728 21.72633 28.27172 33.68123 12.59829 5 45.67780 59.89690 52.97067 44.03166 21.52321 34.00304 35.81131 20.86654 6 45.35124 62.76465 52.57957 47.08019 23.44953 34.64273 48.87000 23.78392 mCherry 1 31.31533 2 30.85531 3 30.66732 4 34.28993 5 35.64215 6 28.99762 2.3.3 Retrieving data from Excel Suppose we have an excel file with multiple tabs and we would like to access the data for mNeonGreen. To import the correct data into a dataframe use: df <- readxl::read_excel('FPbase_Spectra.xlsx', sheet = 'mNeonGreen') head(df) # A tibble: 6 × 3 Wavelength `mNeonGreen EM` `mNeonGreen EX` <dbl> <dbl> <dbl> 1 300 NA NA 2 301 NA NA 3 302 NA NA 4 303 NA NA 5 304 NA NA 6 305 NA NA Again, ‘NA’ indicates that no data is available. Since the read_excel() is a funtion from the ‘tidyverse’ the data is stored in a tibble. This can be converted to an ordinary dataframe: df <- as.data.frame(df) class(df) [1] "data.frame" Now that we have the data loaded, we can generate a plot. For simplicity I use the qplot() function. The more flexible ggplot() function will be introduced later. We need to supply the name of the dataframe, the column for the x-axis data and the column that is used for the y-axis. Note that two of the column names have a space and to properly indicate the name of the column we need to enclose the name with backtics (`). qplot(data=df,x=Wavelength, y=`mNeonGreen EX`) A plot with lines instead of dots can be made by supplying this alternative ‘geometry’: qplot(data=df,x=Wavelength, y=`mNeonGreen EX`, geom='line') The plots show the excitation spectrum of mNeonGreen, and it can be inferred that the protein is maximally excited near 500 nm. In its current shape, the dataframe is not suitable for simultaneously plotting the excitation and emission spectrum. To do that, we need to reshape the data and this will be the topic of the Reshaping data section. 2.3.4 Retrieving data from multiple files When the data is spread over multiple files, it is useful to read these files and combine them into one dataframe. In this example we have the data from three different conditions, each is an individual CSV file. First we create a list with the files based on a pattern. In this case the relevant files contain the string S1P.csv: filelist = list.files(pattern="*S1P.csv") filelist [1] "Cdc42_S1P.csv" "Rac_S1P.csv" "Rho_S1P.csv" Then we use the function map() to perform the function read.csv() for each of the files and we store the result in a new dataframe ‘df_input_list’. df_input_list <- map(filelist, read.csv) The result is a ‘nested’ dataframe, which is a dataframe with dataframes. Instead of having three separate dataframes, we want a single dataframe but it should have a label that reflects the condition. The labels are based on the filenames. We can use str_replace() to remove the extension of the filenames: names(df_input_list) <- str_replace(filelist, pattern = ".csv", replacement = "") After this, we merge the dataframes and create a column ‘id’ that has the label with the filename: df <- bind_rows(df_input_list, .id = "id") head(df) id Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 1 Cdc42_S1P 0.0000000 1.0035170 1.0015490 0.9810209 0.9869040 1.0041990 2 Cdc42_S1P 0.1666667 0.9991689 0.9961631 0.9801265 0.9891608 0.9989283 3 Cdc42_S1P 0.3333333 1.0013450 1.0046440 1.0106020 1.0124910 0.9953477 4 Cdc42_S1P 0.5000000 1.0015790 1.0043180 1.0106890 1.0066810 1.0027020 5 Cdc42_S1P 0.6666667 0.9943522 0.9933341 1.0168220 1.0045540 0.9988462 6 Cdc42_S1P 0.8333333 1.0046240 1.0071780 1.0140210 1.0042580 0.9920673 Cell.6 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 1 1.0049370 1.0042000 1.0014210 1.0001080 1.000748 1.0015060 1.0057850 2 0.9892894 0.9903881 0.9975485 0.9937496 0.995352 0.9962637 0.9972004 3 1.0104820 1.0140110 1.0016740 1.0003500 1.003132 1.0015520 0.9942397 4 1.0031760 1.0016000 1.0000720 1.0035080 1.000595 1.0017760 1.0035220 5 0.9921757 0.9898673 0.9993021 1.0023010 1.000192 0.9989264 0.9993660 6 1.0081460 1.0075700 0.9985681 1.0013800 1.001741 0.9989417 1.0028090 Cell.13 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 1.0111880 1.0147230 1.0089390 1.0032410 1.0068720 1.0019290 1.0008660 NA 2 0.9894263 1.0044960 1.0026040 0.9978889 0.9970717 0.9993551 0.9980562 NA 3 0.9921575 1.0073610 1.0029890 1.0009640 0.9984493 0.9968905 0.9966830 NA 4 1.0102150 0.9910634 0.9943020 0.9942904 0.9932356 1.0059050 1.0043110 NA 5 0.9974161 0.9829283 0.9912844 1.0037130 1.0045560 0.9959676 1.0000940 NA 6 1.0070350 0.9790479 0.9861535 1.0059600 1.0065300 1.0070570 1.0049470 NA Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 Cell.28 Cell.29 1 NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA NA NA NA NA Cell.30 Cell.31 Cell.32 1 NA NA NA 2 NA NA NA 3 NA NA NA 4 NA NA NA 5 NA NA NA 6 NA NA NA This dataframe contains all the relevant information, but it is not tidy yet. We’ll discuss how to convert this dataframe into a tidy format. We can save this dataframe for later: df %>% write.csv('df_S1P_combined.csv', row.names=FALSE) 2.4 Reshaping data Data is often recorded in tables or spreadsheets. Columns are typically used for different conditions (indicated in a header) and each data cell contains a measured value. Although this format makes perfect sense for humans, it is less suitable for analysis and visualization in R. Instead of the tabular, or wide, format, the functions from the tidyverse package work with data in a ‘tidy’ format. The benefit of tidy data is that it is a consistent way to structure datasets, facilitating data manipulation and visualization Wickham, 2014. In other words, this format simplifies downstream processing and visualization. In this section, I will show how data can be converted from spreadsheet format to a long, tidy format. This step is needed to prepare the data for visualization with ggplot() which is also part of the tidyverse package. I will use the nomenclature that is used in the original publication by Hadley Wickham. Before we start, a quick warning that I have been struggling with the concept of tidy data. Probably, because I was very much used to collect, process and summarize data in spreadsheets. In addition, I am used to read and present data in a tabular format. It is important to realize that data in the tidy format contains exactly the same information as non-tidy, spreadsheet data, but it is structured in a different way. In fact we can switch back and forth between the two formats with functions that are provided by R. 2.4.1 Quantitative data, discrete conditions Let’s say that you have measured cell sizes under a number of different experimental conditions and this is stored in an excel spreadsheet. Let’s load the data: df <- readxl::read_excel('Length-wide.xls') df # A tibble: 10 × 5 `Condition 1` `Condition 2` `Condition 3` `Condition 4` `Condition 5` <dbl> <dbl> <dbl> <dbl> <dbl> 1 14.4 19.2 16.6 21.9 18.7 2 16.2 13.7 13.9 20.2 13.2 3 11.2 13.2 13.2 22.7 18.1 4 15.2 20.1 13.7 19 18.2 5 11.7 21.3 15.9 19.5 15.9 6 17.5 19.9 13 14.3 28.7 7 17 20.8 10.8 14 29.6 8 18.7 18.4 14.9 17.5 13.3 9 19.1 20.7 14.6 16.5 13.9 10 10.7 19.2 14.2 17.8 13.4 First, we will replace the spaces in the column names. Although this is not strictly necessary, it simplifies handling of the data. We use names() to get the names of the dataframe and str_replace() to replace the space by an underscore: names(df) <- str_replace(names(df), pattern = " ", replacement = "_") head(df) # A tibble: 6 × 5 Condition_1 Condition_2 Condition_3 Condition_4 Condition_5 <dbl> <dbl> <dbl> <dbl> <dbl> 1 14.4 19.2 16.6 21.9 18.7 2 16.2 13.7 13.9 20.2 13.2 3 11.2 13.2 13.2 22.7 18.1 4 15.2 20.1 13.7 19 18.2 5 11.7 21.3 15.9 19.5 15.9 6 17.5 19.9 13 14.3 28.7 Now that the column names are fixed, we can restructure the data. The aim is to create a dataframe with one column that specifies the conditions and one column with all the measured values. There is a long history of packages and functions that can be used for restructuring (gather(), melt()). Here we use the most modern function pivot_longer() from the tidyverse package. We need to specify the dataframe, which columns to restructure (specified by everything() here) and the names of the new columns. The current column names will be transferred to a column that is named “condition” and all values will be transferred to a column named “size”. df_tidy <- pivot_longer(df, cols = everything(), names_to = "Condition", values_to = "Size") head(df_tidy) # A tibble: 6 × 2 Condition Size <chr> <dbl> 1 Condition_1 14.4 2 Condition_2 19.2 3 Condition_3 16.6 4 Condition_4 21.9 5 Condition_5 18.7 6 Condition_1 16.2 The benefit of this format is that is is now clear what the numbers are. The most important requirement for tidy data is that each variable occupies only a single column and that each row is an observation. Let’s save the data in a csv file: df_tidy %>% write.csv('Length-tidy.csv') 2.4.2 Multiple discrete conditions Here, we deal with a more complex spreadsheet that holds data of multiple replicates and two experimental conditions. Note that the data from multiple conditions can be stored in different ways and here we only treat one way. Especially for these kind of datasets, the tidy format is a better, cleaner structure. We will load the data from a repository: df_multiheader <- read.csv('https://zenodo.org/record/4056966/files/Data-with-replicates.csv') head(df_multiheader) Control Control.1 Control.2 Drug Drug.1 Drug.2 1 Replicate1 Replicate2 Replicate3 Replicate1 Replicate2 Replicate3 2 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 3 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 4 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 5 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 6 41.54301 42.66665 26.92205 30.25243 22.90337 21.93457 The first row lists the experimental condition and the second row identifies biological replicates. Now, when this is loaded as an ordinary CSV, the first row is the header, but the second row is treated as data. Let’s load the data without flagging a header. We also add the stringsAsFactors = FALSE to make sure that the data is loaded as characters <chr> and not as factors <fctr>. The difference is not obvious, but we run into problems later when we want to convert all the values into actual numbers (which we will do this at the very last step): df_multiheader <- read.csv("https://zenodo.org/record/4056966/files/Data-with-replicates.csv", header = FALSE, stringsAsFactors = FALSE) head(df_multiheader) V1 V2 V3 V4 V5 V6 1 Control Control Control Drug Drug Drug 2 Replicate1 Replicate2 Replicate3 Replicate1 Replicate2 Replicate3 3 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 4 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 5 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 6 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 We’ll load the first row as a vector that contains the name of each column. To this end we select the first row of the dataframe with the brackets [1,]. The result is a dataframe and to turn this into a vector with strings we use unlist(): first_row <- df_multiheader[1,] %>% unlist(use.names=FALSE) first_row [1] "Control" "Control" "Control" "Drug" "Drug" "Drug" We repeat this for the second row: second_row <- df_multiheader[2,] %>% unlist(use.names=FALSE) second_row [1] "Replicate1" "Replicate2" "Replicate3" "Replicate1" "Replicate2" [6] "Replicate3" Next, row 1 and row 2 are removed from the dataframe, keeping only the data: df <- df_multiheader[-c(1:2),] head(df) V1 V2 V3 V4 V5 V6 3 43.69202 35.43517 27.69333 35.3156 20.54166 16.13286 4 41.85664 38.17644 35.61621 34.81943 20.43263 16.47575 5 49.11707 39.86308 27.20247 30.45615 29.8097 16.49928 6 49.79331 37.5157 39.98903 37.46084 25.94712 18.48844 7 41.54301 42.66665 26.92205 30.25243 22.90337 21.93457 8 44.04201 37.10115 18.24681 35.93469 20.10045 22.86391 The labels of the conditions and replicates are combined by pasting them together with an underscore to separate the labes. The result is a single vector with unique labels: combined_labels <- paste(first_row, second_row, sep="_") combined_labels [1] "Control_Replicate1" "Control_Replicate2" "Control_Replicate3" [4] "Drug_Replicate1" "Drug_Replicate2" "Drug_Replicate3" Now, we can add these labels as column names to the dataframe: colnames(df) <- combined_labels head(df) Control_Replicate1 Control_Replicate2 Control_Replicate3 Drug_Replicate1 3 43.69202 35.43517 27.69333 35.3156 4 41.85664 38.17644 35.61621 34.81943 5 49.11707 39.86308 27.20247 30.45615 6 49.79331 37.5157 39.98903 37.46084 7 41.54301 42.66665 26.92205 30.25243 8 44.04201 37.10115 18.24681 35.93469 Drug_Replicate2 Drug_Replicate3 3 20.54166 16.13286 4 20.43263 16.47575 5 29.8097 16.49928 6 25.94712 18.48844 7 22.90337 21.93457 8 20.10045 22.86391 To convert this dataframe into a tidy format we use the pivot_longer() function, exactly like we did in the previous example: df_tidy <- pivot_longer(df, cols = everything(), names_to = "combined_labels", values_to = "Size") head(df_tidy) # A tibble: 6 × 2 combined_labels Size <chr> <chr> 1 Control_Replicate1 43.69202 2 Control_Replicate2 35.43517 3 Control_Replicate3 27.69333 4 Drug_Replicate1 35.3156 5 Drug_Replicate2 20.54166 6 Drug_Replicate3 16.13286 The dataframe is tidy now, but we need to split the conditions from the replicates in the first column with combined labels: df_tidy <- df_tidy %>% separate(combined_labels, c('Treatment', 'Replicate')) head(df_tidy) # A tibble: 6 × 3 Treatment Replicate Size <chr> <chr> <chr> 1 Control Replicate1 43.69202 2 Control Replicate2 35.43517 3 Control Replicate3 27.69333 4 Drug Replicate1 35.3156 5 Drug Replicate2 20.54166 6 Drug Replicate3 16.13286 There is still one problem that we need to fix. The values in de the column ‘Size’ are characters <chr>, which means these are strings. Let’s convert the strings to actual numbers: df_tidy %>% mutate(Size = as.numeric(Size)) # A tibble: 300 × 3 Treatment Replicate Size <chr> <chr> <dbl> 1 Control Replicate1 43.7 2 Control Replicate2 35.4 3 Control Replicate3 27.7 4 Drug Replicate1 35.3 5 Drug Replicate2 20.5 6 Drug Replicate3 16.1 7 Control Replicate1 41.9 8 Control Replicate2 38.2 9 Control Replicate3 35.6 10 Drug Replicate1 34.8 # … with 290 more rows This kind of data, acquired at different conditions with different replicas is ideally suited for a SuperPlot (Lord et al., 2000). An example of this kind of data visualization is Protocol 2 2.4.3 Double quantitative data An example of quantitative continuous data for two variables is when measurements are performed at different concentrations, times or wavelengths. The latter example we have encountered before when spectral data was loaded. Let’s look again at that data and convert it to tidy format. df <- readxl::read_excel('FPbase_Spectra.xlsx', sheet = 'mNeonGreen') head(df) # A tibble: 6 × 3 Wavelength `mNeonGreen EM` `mNeonGreen EX` <dbl> <dbl> <dbl> 1 300 NA NA 2 301 NA NA 3 302 NA NA 4 303 NA NA 5 304 NA NA 6 305 NA NA Both the Emission (EM) and excitation (EX) data are acquired as a function of wavelength. To convert this data to tidy format, we need to keep a column with wavelength data and we need another column with the spectral data. To achieve this, we will modify the mNeonGreen data and keep the Wavelength data as a column: df_tidy <- pivot_longer(df, cols = -Wavelength, names_to = "sample", values_to = "intensity") head(df_tidy) # A tibble: 6 × 3 Wavelength sample intensity <dbl> <chr> <dbl> 1 300 mNeonGreen EM NA 2 300 mNeonGreen EX NA 3 301 mNeonGreen EM NA 4 301 mNeonGreen EX NA 5 302 mNeonGreen EM NA 6 302 mNeonGreen EX NA We can now plot the two spectra, which was not possible before the conversion: qplot(data=df_tidy,x=Wavelength, y=intensity, color=sample, geom='line') A more elaborate example of plotting spectra is given in Protocol 1 2.4.4 Data from multiple files In an earlier example, we have combined the data from multiple files into a single dataframe. Let’s first load it: df <- read.csv('df_S1P_combined.csv') head(df) id Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 1 Cdc42_S1P 0.0000000 1.0035170 1.0015490 0.9810209 0.9869040 1.0041990 2 Cdc42_S1P 0.1666667 0.9991689 0.9961631 0.9801265 0.9891608 0.9989283 3 Cdc42_S1P 0.3333333 1.0013450 1.0046440 1.0106020 1.0124910 0.9953477 4 Cdc42_S1P 0.5000000 1.0015790 1.0043180 1.0106890 1.0066810 1.0027020 5 Cdc42_S1P 0.6666667 0.9943522 0.9933341 1.0168220 1.0045540 0.9988462 6 Cdc42_S1P 0.8333333 1.0046240 1.0071780 1.0140210 1.0042580 0.9920673 Cell.6 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 1 1.0049370 1.0042000 1.0014210 1.0001080 1.000748 1.0015060 1.0057850 2 0.9892894 0.9903881 0.9975485 0.9937496 0.995352 0.9962637 0.9972004 3 1.0104820 1.0140110 1.0016740 1.0003500 1.003132 1.0015520 0.9942397 4 1.0031760 1.0016000 1.0000720 1.0035080 1.000595 1.0017760 1.0035220 5 0.9921757 0.9898673 0.9993021 1.0023010 1.000192 0.9989264 0.9993660 6 1.0081460 1.0075700 0.9985681 1.0013800 1.001741 0.9989417 1.0028090 Cell.13 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 1.0111880 1.0147230 1.0089390 1.0032410 1.0068720 1.0019290 1.0008660 NA 2 0.9894263 1.0044960 1.0026040 0.9978889 0.9970717 0.9993551 0.9980562 NA 3 0.9921575 1.0073610 1.0029890 1.0009640 0.9984493 0.9968905 0.9966830 NA 4 1.0102150 0.9910634 0.9943020 0.9942904 0.9932356 1.0059050 1.0043110 NA 5 0.9974161 0.9829283 0.9912844 1.0037130 1.0045560 0.9959676 1.0000940 NA 6 1.0070350 0.9790479 0.9861535 1.0059600 1.0065300 1.0070570 1.0049470 NA Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 Cell.28 Cell.29 1 NA NA NA NA NA NA NA NA NA 2 NA NA NA NA NA NA NA NA NA 3 NA NA NA NA NA NA NA NA NA 4 NA NA NA NA NA NA NA NA NA 5 NA NA NA NA NA NA NA NA NA 6 NA NA NA NA NA NA NA NA NA Cell.30 Cell.31 Cell.32 1 NA NA NA 2 NA NA NA 3 NA NA NA 4 NA NA NA 5 NA NA NA 6 NA NA NA The data is still in a wide format and all the data that is in a column that starts with ‘Cell’ needs to be combined into a single column. The other columns id and Time need to be excluded from this operation and this is achieved with using the - sign: df_tidy <- pivot_longer(df, cols = -c(id, Time), names_to = "object", values_to = "activity") head(df_tidy) # A tibble: 6 × 4 id Time object activity <chr> <dbl> <chr> <dbl> 1 Cdc42_S1P 0 Cell.1 1.00 2 Cdc42_S1P 0 Cell.2 1.00 3 Cdc42_S1P 0 Cell.3 0.981 4 Cdc42_S1P 0 Cell.4 0.987 5 Cdc42_S1P 0 Cell.5 1.00 6 Cdc42_S1P 0 Cell.6 1.00 If desired, the column ‘id’ can be renamed and/or split: df_tidy <- df_tidy %>% separate(id, c('Condition', 'Treatment')) head(df_tidy) # A tibble: 6 × 5 Condition Treatment Time object activity <chr> <chr> <dbl> <chr> <dbl> 1 Cdc42 S1P 0 Cell.1 1.00 2 Cdc42 S1P 0 Cell.2 1.00 3 Cdc42 S1P 0 Cell.3 0.981 4 Cdc42 S1P 0 Cell.4 0.987 5 Cdc42 S1P 0 Cell.5 1.00 6 Cdc42 S1P 0 Cell.6 1.00 This dataframe is perfectly tidy, but there’s one little improvement that improves the sorting of the objects. The number of cells runs from 1 to 32. When it is sorted, Cell.1 will be followed by Cell.10: sort(unique(df_tidy$object)) [1] "Cell.1" "Cell.10" "Cell.11" "Cell.12" "Cell.13" "Cell.14" "Cell.15" [8] "Cell.16" "Cell.17" "Cell.18" "Cell.19" "Cell.2" "Cell.20" "Cell.21" [15] "Cell.22" "Cell.23" "Cell.24" "Cell.25" "Cell.26" "Cell.27" "Cell.28" [22] "Cell.29" "Cell.3" "Cell.30" "Cell.31" "Cell.32" "Cell.4" "Cell.5" [29] "Cell.6" "Cell.7" "Cell.8" "Cell.9" To correct this, we need a 0 preceding the single digit numbers, e.g. Cell.01. To do that, we first split the object column into two columns, using the dot as a separator: df_tidy <- df_tidy %>% separate("object", c("object", "number"), sep="\\\\.") Then, we fill up all the number to two digits by adding a 0 in front of all the single digit numbers with the function str_pad(): df_tidy <- df_tidy %>% mutate(number=str_pad(number, 2, pad = "0")) We can merge the two columns back together and I changed the seperator to a space: df_tidy <- df_tidy %>% unite("object", c("object", "number"), sep=" ") head(df_tidy) # A tibble: 6 × 5 Condition Treatment Time object activity <chr> <chr> <dbl> <chr> <dbl> 1 Cdc42 S1P 0 Cell 01 1.00 2 Cdc42 S1P 0 Cell 02 1.00 3 Cdc42 S1P 0 Cell 03 0.981 4 Cdc42 S1P 0 Cell 04 0.987 5 Cdc42 S1P 0 Cell 05 1.00 6 Cdc42 S1P 0 Cell 06 1.00 When the sorting is repeated it looks better: sort(unique(df_tidy$object)) [1] "Cell 01" "Cell 02" "Cell 03" "Cell 04" "Cell 05" "Cell 06" "Cell 07" [8] "Cell 08" "Cell 09" "Cell 10" "Cell 11" "Cell 12" "Cell 13" "Cell 14" [15] "Cell 15" "Cell 16" "Cell 17" "Cell 18" "Cell 19" "Cell 20" "Cell 21" [22] "Cell 22" "Cell 23" "Cell 24" "Cell 25" "Cell 26" "Cell 27" "Cell 28" [29] "Cell 29" "Cell 30" "Cell 31" "Cell 32" We will save this tidy dataframe for later use: df_tidy %>% write.csv("df_S1P_combined_tidy.csv", row.names = FALSE) 2.4.5 Data in 96-wells format {data-in-96-wells-format} Data measured on samples in multiwell plates are often stored in a structure that resembles the plate layout. As an example, we use here a dataset from a luciferase experiment, measured with a 96-well plate luminescence reader. The data is stored in a sheet named ‘Results’ in an xlsx file. The cells in which the data is stored are located in F21:Q28. By selecting these cells, only the 96 values that were measured are read: df <- readxl::read_excel('DualLuc_example_data.xlsx', sheet = 'Results', range = "F21:Q28", col_names = F) New names: • `` -> `...1` • `` -> `...2` • `` -> `...3` • `` -> `...4` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` • `` -> `...12` The table-like layout of the data can be changed into a list of 96 values: data_as_list <- df %>% unlist(use.names = F) It is essential to know how the table is converted and this is done by reading the data from the first column, top to bottom, than the second column, etc. Knowing this, we can define the wells to which the data belongs, which would be A1, B1, … , G12, H12. column <- rep(1:12, each=8) row <- rep(LETTERS[1:8],12) Well <- paste0(row,column) Well [1] "A1" "B1" "C1" "D1" "E1" "F1" "G1" "H1" "A2" "B2" "C2" "D2" [13] "E2" "F2" "G2" "H2" "A3" "B3" "C3" "D3" "E3" "F3" "G3" "H3" [25] "A4" "B4" "C4" "D4" "E4" "F4" "G4" "H4" "A5" "B5" "C5" "D5" [37] "E5" "F5" "G5" "H5" "A6" "B6" "C6" "D6" "E6" "F6" "G6" "H6" [49] "A7" "B7" "C7" "D7" "E7" "F7" "G7" "H7" "A8" "B8" "C8" "D8" [61] "E8" "F8" "G8" "H8" "A9" "B9" "C9" "D9" "E9" "F9" "G9" "H9" [73] "A10" "B10" "C10" "D10" "E10" "F10" "G10" "H10" "A11" "B11" "C11" "D11" [85] "E11" "F11" "G11" "H11" "A12" "B12" "C12" "D12" "E12" "F12" "G12" "H12" We can now generate a dataframe that lists the wells and the values, which is a (luminescence) intensity. We can also add two additional columns that list the row and column information: df_tidy_wells <- data.frame(column, row, Well, Intensity=data_as_list) head(df_tidy_wells) column row Well Intensity 1 1 A A1 2010 2 1 B B1 3210 3 1 C C1 1965 4 1 D D1 2381 5 1 E E1 1292 6 1 F F1 991 df_tidy_wells %>% write.csv("df_tidy_wells.csv") This concludes the conversion of data from the plate layout into a tidy format. The instructions explained here are used in Protocol 4 "],["plotting-the-data.html", "Chapter 3 Plotting the Data 3.1 Data over time (continuous vs. continuous) 3.2 Discrete conditions 3.3 Statistics 3.4 Plot-a-lot - discrete data 3.5 Optimizing the data visualization 3.6 Adjusting the layout 3.7 Plot-a-lot - continuous data", " Chapter 3 Plotting the Data When the data is in the right shape, it is ready for plotting. In R there is a dedicated package, ggplot2, for state-of-the-art data visualization. It is part of the ‘tidyverse’ and available when the tidyverse package is loaded. The ggplot2 package is extremely versatile and the plots can be fully customized. This great advantage comes with a disadvantage and that is complexity. Hopefully this chapter will get you started with generating some informative and good-looking plots. In the last chapter with Complete protocols we’ll dive deeper into details. The default ‘theme’ that is used in ggplot uses a grey plotting area with white gridlines, as can be seen in the plots that were presented in the previous sections. Since I prefer a more classic, white plotting area, I use a different theme from now on. This is theme_light() and it can be set in R (when the tidyverse or ggplot2 package is loaded) as follows: theme_set(theme_light()) ggplot(mtcars, aes(wt, mpg)) + geom_point() 3.1 Data over time (continuous vs. continuous) We have previously used a quick plot function qplot() from the ggplot2 package. We will use it here again for showing single cell responses from timelapse imaging. First, we load the (tidy) data and filter the data that reports on Rho and does not have any missing values in the column named activity: df_tidy <- read.csv("df_S1P_combined_tidy.csv") df_Rho <- df_tidy %>% filter(Condition == 'Rho') %>% filter(!is.na(activity)) We use qplot() to plot the data, by defining the dataframe, and by selecting what data is used for the x- and y-axis. The default geometry (dots) is overridden to show lines and we need to indicate which column defines which is grouped and connected by the line (in this case it is defined by the column object): qplot(data=df_Rho, x=Time, y=activity, geom = 'line', group=object) Let’s now change to the ggplot() function, as it allows for more flexibility. First we create an identical plot: ggplot(data=df_Rho, aes(x=Time, y=activity, group=object)) + geom_line() The aes() function is used for mapping “aesthetics”. The aesthetics specify how the variables from the dataframe are used to visualise those variables. In this case the data in the column ‘Time’ is used for mapping the data onto the x-axis and data in the column ‘activity’ is used to map the data onto the y-axis. The geom_line() function specifies that the data is shown as a line and it can be used to set the appearance of the line. We can set the linewidth (size) and the transparency (alpha). Moreover, we can map the different objects to different colors with aes(): ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_line(aes(color=object), size=1, alpha=0.8) Since ggplot supports layers, we can add another layer that shows the data as dots using geom_point(). Note that when the definition of the plot spans multiple lines, each line (when followed by another line should end with a +: ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_line(aes(color=object), size=1, alpha=0.8) + geom_point(size=2, alpha=0.8) Note that the order is important, the geometry that is defined by the last function (lines in this example) appears on top in the plot: ggplot(data=df_Rho, aes(x=Time, y=activity)) + geom_point(size=2, alpha=0.8) + geom_line(aes(color=object), size=1, alpha=0.8) There is another way to define a plot and add layers. First we define a ggplot object: p <- ggplot(data=df_Rho, aes(x=Time, y=activity)) We can define layers with different geometries and add these to the ggplot object: p <- p + geom_point(size=2, alpha=0.8) p <- p + geom_line(aes(color=object), size=1, alpha=0.8) Just like the content of a dataframe can be displayed by typing its name, the plot can be shown by typing its name: p This is convenient and we can use it to experiment with different visualizations. Here I demonstrate this modify&plot approach to remove the legend: p + theme(legend.position = "none") Or remove the legend and add a title: p + theme(legend.position = "none") + ggtitle("Single cell responses over time") Since ggplot() is part of the tidyverse, it accepts dataframes that are passed through a pipe: %>% This can be used to select a subset of a dataframe for plotting. Below, the ‘Rac’ condition is filtered from the dataframe df_tidy and passed to ggplot for plotting: df_tidy %>% filter(Condition == 'Rac') %>% ggplot(aes(x=Time, y=activity)) + geom_line(aes(color=object)) 3.2 Discrete conditions First, we load a dataset that has intensity measurements for 5 different conditions. For each conditions there are three measurements. This would be a typical outcome of the quantification of a western blot for N=3: df <- read.csv('Low_n_tidy.csv') head(df) Condition Intensity 1 A 1.0 2 B 10.3 3 C 5.5 4 D 4.5 5 E 2.3 6 A 1.1 The basic function to plot the data is ggplot(). We supply the name of the dataframe and we define how to ‘map’ the data onto the x- and y-axis. For instance, we can plot the different conditions on the x-axis and show the size measurements on the y-axis: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) This defines the canvas, but does not plot any data yet. To plot the data, we need to define how it will be plotted. We can choose to plot it as dots with the function geom_point(): ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_point() Within geom_point() we can specify the looks of the dot. For instance, we can change its color, shape and size: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_point(color="blue", shape=18 ,size=8) One of the issues with data that has low N, is that it may not look ‘impressive’, in the sense that there is lots of empty space on the canvas. This may be a reason to resort to bar graphs. However, bar graphs only show averages, which hinders transparent communication of results (https://doi.org/10.1371/journal.pbio.1002128). In situations where a bar graph is added, it has to be defined in the first layer to not overlap with the datapoints: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean") + geom_point(size=4) In the default setting, there’s too much emphasis on the bar. This can be changed by formatting the looks of the bars, i.e. by changing the fill color, and the width: ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_point(size=4) The overlap of the dots can be reduced by introducing ‘jitter’ which displays the dots with a random offset. Note that the extent of the offset can be controlled and should not exceed the width of the bar. Another way to improve the visibility of overlapping dots is to make the dots transparant. This is controlled by ‘alpha’, which should be a number between 0 (fully transarent, invisible) and 1 (not transparant). In the graph below, both jitter and transparancy are used. ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) The jitter is applied randomly. To make a plot with reproducible jitter, one can fix the seed that is used for randomization by providing set.seed() with a number of choice, which fixes the randomness: set.seed(1) ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) In the plot above, the length of the bar reflects the average value. This is only true when the bar starts from 0. Situations in which the length of the bar does not accurately reflect the number are: - using a linear scale that does not include zero - cutting the axis - using a logarithmic scale, which (per definition) does not include zero. An example is shown below, where the logarithmic scale and limites are defined in by the scale_y_log10() function. Due to the non-linear scale, the length of the bar is not proportional to the value (the average) it reflects. This leads to misinterpretation of the data. ggplot(data=df, mapping = aes(x=Condition, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) + scale_y_log10(limits=c(.5,12)) 3.2.1 X-axis data: qualitative versus quantitative data Suppose that the data comes from an experiment in which the data are measured at different time points. First we define a vector that defines the timepoints: e.g. 0, 1, 2, 5, 10: t <- c(0,1,2,5,10) We need to repeat these timepoints three times, once for each replicate: t3 <- rep(t,3) Now we can add the vector to the dataframe: df <- df %>% mutate(Time=t3) And plot the activity for the different time points: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) This graph looks different because we it has numbers on the x-axis. The numbers are treated as ‘continuous quantitative data’ and the data is positioned according to the values. To treat the numbers as conditions or labels we need to convert them to qualitative data. This class of data is called factors in R. We can verify the class of data by selecting the column using the class() function. Here we select the third column of the dataframe to check its class: class(df[,3]) [1] "numeric" Now we convert the column ‘Time’ to the class factor: df <- df %>% mutate(Time=as.factor(Time)) Let’s verify that the class is changed: class(df[,3]) [1] "factor" We use the same line of code to plot the data, and the graph will look similar to the graph that used the conditions indicated with letters. ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_bar(stat = "summary", fun = "mean", fill="grey80", width=0.7) + geom_jitter(size=4, width=0.2, alpha=0.7) Whether you treat the numbers on the x-axis as labels or values determines on the data and the message that you want to convey. If it is important to know when the highest activity occurs, it may not matter that the points are not equidistant (as in this example). In fact the data in the plot may better align with the lanes of a blot (which are also equidistant) from which the data are quantified . On the other hand, if you are interested in the dynamics of the activity, the timepoints on the x-axis should reflect the actual values to enable proper interpretation. 3.3 Statistics 3.3.1 Introduction Thus far, we were mainly concerned with plotting the data. But plots with scientific data often feature some kind of statistics. Next to the mean or median, error bars are used to summarize variability or to reflect the uncertainty of the measurement. Intermezzo: Descriptive vs Inferential Statistics It is a good idea to reflect on the reason to display statistics and it is essential to understand that you can choose between descriptive and inferential statistics. The descriptive statistics are used to summarize the data. Examples of descriptive statistics are the mean, median and standard deviation. Boxplots also display descriptive statistics. Inferential statistics are used to make ‘inferences’ or, in other words, generalize the data that are measured to the population it was sampled from. It is used to compare experiments and make predictions. Examples of inferential statistics are standard error of the mean and confidence intervals. There are (at least) two ways to overlay statistics in a plot. The first way is demonstrated in the previous section, where a layer with the statistics (bar) was directly added to the plot. Below, we take this strategy a step further to display the standard deviation. 3.3.2 Data summaries directly added as a plot layer In the code below the stat_summary() defines a layer with statistics. The fun=mean statement indicates that the function mean() should be applied to every condition on the x-axis: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun = mean, geom='point', size=8, color='blue') This is pretty ugly and it is more common to indicate the mean (or median) with a horizontal line. This can be done by specifying the shape of the point: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun = mean, geom='point', shape=95, size=24, color='black') This works, but it doesn’t allow us to specify the width and the thickness of the line. To have better control over the line we turn to another ‘geom’, geom_errorbar(). This function is actually used to display errorbars, but if we only set one value for the min and max, it allows us to display the mean. We can change the looks of the horizontal bar by changing the width and the size. The latter defines the thickness of the line. ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) We can also indicate the standard deviation (SD), but we need to define a custom function to calculate the position of the upper and lower limit of the errorbar. That is, we need to display mean+SD and mean-SD for each condition. The code for the function that defines the lower limit is: function(y) {mean(y)-sd(y)} and for the upper limit it is: function(y) {mean(y)+sd(y)} Here we go (note that the width is set to a smaller value): ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='errorbar', width=0.3, size =1) By combing the layers that define the mean and de sd, we can show both: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='errorbar', width=0.3, size =1) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) Finally, an example that displays the 95% confidence intervals: ggplot(data=df, mapping = aes(x=Time, y=Intensity)) + geom_jitter(size=4, width=0.2, alpha=0.7) + stat_summary(fun.min=function(y) {mean(y) - qt((1-0.95)/2, length(y) - 1) * sd(y) / sqrt(length(y) - 1)}, fun.max=function(y) {mean(y) + qt((1-0.95)/2, length(y) - 1) * sd(y) / sqrt(length(y) - 1)}, geom='errorbar', width=0.3, size =1) + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size =1) This method works, but the code to generate this graph is pretty long and the definition of the function make it difficult to follow and understand what’s going on. In addition, the values for the statistics are not accessible. To solve these issue, I will demonstrate below a more intuitive way to calculate and display the statistics. 3.3.3 Data summaries from a dataframe We start out from the same data and dataframe. First, we calculate the statistics and assign the values to a new dataframe. To this end, we use the summarise() function for each condition (Time in this dataset) which we indicate by the use of group_by(): df_summary <- df %>% group_by(Time) %>% summarise(n=n(), mean=mean(Intensity), sd=sd(Intensity)) head(df_summary) # A tibble: 5 × 4 Time n mean sd <fct> <int> <dbl> <dbl> 1 0 3 1 0.1 2 1 3 9.83 0.451 3 2 3 6.1 1.22 4 5 3 4.67 0.208 5 10 3 3.17 0.850 This new dataframe can be used as source for displaying the statistics. Note that we need to indicate the df_summary dataframe for each layer: ggplot(data = df) + geom_jitter(aes(x=Time, y=Intensity),size=4, width=0.2, alpha=0.7) + geom_errorbar(data=df_summary, aes(x=Time,ymin=(mean-sd), ymax=(mean+sd)), width=0.3, size =1) + geom_errorbar(data=df_summary, aes(x=Time,ymin=(mean), ymax=(mean)), width=0.6, size =1) How about other stats? If we calculate other stats like sem, MAD and confidence intervals and store those in a dataframe, we can retrieve those for plotting as well. Below the code for the calculation of the most common statistics is presented. There is no function to calculare sem or the confidence interval and so we calulate those using mutate(). The confidence levels is set to 95%: Confidence_level = 0.95 df_summary <- df %>% group_by(Time) %>% summarise(n=n(), mean=mean(Intensity), median=median(Intensity), sd=sd(Intensity)) %>% mutate(sem=sd/sqrt(n-1), mean_CI_lo = mean + qt((1-Confidence_level)/2, n - 1) * sem, mean_CI_hi = mean - qt((1-Confidence_level)/2, n - 1) * sem ) head(df_summary) # A tibble: 5 × 8 Time n mean median sd sem mean_CI_lo mean_CI_hi <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 3 1 1 0.1 0.0707 0.696 1.30 2 1 3 9.83 9.8 0.451 0.319 8.46 11.2 3 2 3 6.1 5.5 1.22 0.860 2.40 9.80 4 5 3 4.67 4.6 0.208 0.147 4.03 5.3 5 10 3 3.17 3.2 0.850 0.601 0.579 5.75 In principle the code for plotting the error bars that reflect the standard deviations (or sem) can be simplified if the upper and lower limit are calculated, similar to the example shown above for the 95% confidence intervals. 3.3.4 Data summaries for continuous x-axis data Let’s revisit the data from the time-course of Rho GTPase activity that we’ve looked at earlier: df_tidy <- read.csv("df_S1P_combined_tidy.csv") df_Rho <- df_tidy %>% filter(Condition == 'Rho') %>% filter(!is.na(activity)) Calculate the statistics for each time point: df_summary <- df_Rho %>% group_by(Time) %>% summarise(n=n(), mean=mean(activity), median=median(activity), sd=sd(activity)) %>% mutate(sem=sd/sqrt(n-1), mean_CI_lo = mean + qt((1-Confidence_level)/2, n - 1) * sem, mean_CI_hi = mean - qt((1-Confidence_level)/2, n - 1) * sem ) head(df_summary) # A tibble: 6 × 8 Time n mean median sd sem mean_CI_lo mean_CI_hi <dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 12 0.998 0.997 0.00477 0.00144 0.995 1.00 2 0.167 12 1.00 1.00 0.00615 0.00186 0.999 1.01 3 0.333 12 0.998 0.998 0.00260 0.000783 0.996 1.00 4 0.5 12 0.999 0.998 0.00657 0.00198 0.995 1.00 5 0.667 12 1.00 1.00 0.00703 0.00212 0.998 1.01 6 0.833 12 1.00 1.00 0.00741 0.00223 0.998 1.01 With this data summary it is possible to depict the 95% confidence interval as error bars: ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, color=object),size=1, alpha=0.7) + geom_errorbar(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), width=0.3, size=1, alpha=0.7) It works, but it is also quite messy. Luckily ggplot has a more elegant solution and that’s geom_ribbon(): ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, group=object),size=.5, alpha=0.4) + geom_ribbon(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), fill='blue', alpha=0.3) Note that I also removed the color of the individual lines, as it is more about the ensemble and it’s average than the individual line. Adding a line to reflect the average is pretty straightforward: ggplot(data = df_Rho) + geom_line(aes(x=Time, y=activity, group=object),size=.5, alpha=0.4) + geom_ribbon(data=df_summary, aes(x=Time,ymin=mean_CI_lo, ymax=(mean_CI_hi)), fill='blue', alpha=0.3) + geom_line(data=df_summary, aes(x=Time,y=mean), color='blue', size=2, alpha=0.8) 3.4 Plot-a-lot - discrete data Other data summaries that are often depicted in plots are boxplots and violinplots. These are not suited for data with low n, as in the previous example. The reason is that the boxplot is defined by five values, i.e. the median (the central line), the interquartile range, IQR (the two limits of the box) and the endpoints of the two lines, also known as whiskers. It makes no sense to use a boxplot for n=5, since it does not add any new information. There is no hard cut-off, but in my opinion boxplots make sense when you have 10 or more datapoints per condition. Although the boxplot is a good data summary for normally distributed and skewed data distributions, it doesn’t capture the underlying distribution well when it is bi- or multimodal. In these cases, a violin plot is better suited. The box- and violinplot are easily added as a layer as they are defined by specific functions, geom_boxplot() and geom_violin(). First, let’s load a dataset with larger n. The function summary() provides a quick overview of the data: df <- read.csv('Area_tidy.csv') summary(df) Condition value Length:283 Min. : 477.2 Class :character 1st Qu.:1152.1 Mode :character Median :1490.9 Mean :1567.8 3rd Qu.:1838.1 Max. :3906.7 There are three conditions, with relative large n. Let’s plot the data: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) Adding a boxplot: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) + geom_boxplot() The geom_boxplot displays outliers (data beyond the whiskers). This is clear when only the boxplot is shown: ggplot(df, aes(x=Condition, y=value)) + geom_boxplot() When the data is displayed together with the boxplot, the outliers need to be removed to avoid duplication. And to make sure that the data is visibel and not hidden by the boxplot, we can either change the order of the layers or remove the white color that is used to fill the box: ggplot(df, aes(x=Condition, y=value)) + geom_jitter(width=0.2, alpha=0.5) + geom_boxplot(fill=NA, outlier.color = NA) In case a boxplot is used as summary, it may be useful to have the values of Q1, Q3 and the interquartile range. The code shown below can be used to calculate all these paramters and also includes the median absolute deviation (MAD) as a robust measure of variability: Confidence_level = 0.95 df_summary <- df %>% group_by(Condition) %>% summarise(n=n(), mean=mean(value), median=median(value), sd=sd(value), MAD=mad(value, constant=1), IQR=IQR(value), Q1=quantile(value, probs=0.25), Q3=quantile(value, probs=0.75)) df_summary # A tibble: 3 × 9 Condition n mean median sd MAD IQR Q1 Q3 <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 LARG 99 1361. 1271. 486. 250. 485. 1053. 1538. 2 TIAM 110 1808. 1705. 704. 416. 818. 1293. 2112. 3 wt 74 1487. 1509. 459. 333. 662. 1158. 1821. Display of a violinplot in addition to the data: ggplot(df, aes(x=Condition, y=value)) + geom_violin() + geom_jitter(width=0.2, alpha=0.5) Personally, I like the combination of data and violinplot, but the jitter can make the plot look messy. There are packages that enable the plotting of the data according to its distribution. There is geom_sina() from the {ggforce} package and geom_quasirandom() from the {ggbeeswarm} package: library(ggbeeswarm) ggplot(df, aes(x=Condition, y=value)) + geom_violin() + geom_quasirandom(width=0.3, alpha=0.5) Sometimes, you find examples of boxplots overlayed on violin plots, like this (and note that we have filled the violins with a unique color for each condition): ggplot(df, aes(x=Condition, y=value)) + geom_violin(aes(fill=Condition), alpha=0.5) + geom_boxplot(width=0.1, outlier.color = NA) Note that geom_quasirandom() can generate plots with excessive overlap between data points when there’s large amounts of data. In some cases this can be solved by increasing the transparency (by decreasing alpha). Another option is to use geom_beeswarm(), which does not allow overlap of the points. I have a preference for showing the actual data, but for large n the violinplot may better convey the message of the data than a cluttered plot that shows a lot of dots. 3.5 Optimizing the data visualization 3.5.1 Rotation Rotating a plot by 90 degrees can be surprisingly effective. Especially when the labels that are used for the x-axis are so long that they need to be rotated, it is better to rotate the plot. This improves the readability of the numbers and labels on both the x- and y-axis and avoids the need of tilting your head. library(ggbeeswarm) ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) + coord_flip() An example of how to further tweak a 90˚ rotated plots is given in Protocol 2 3.5.2 Ordering conditions The order of the conditions used for the x-axis (for discrete conditions) is numeric and alphabetic. In case of a large number of conditions, it can help to sort these according to the median or mean value. This requires another order of the factors. To check the order of the factors in the dataframe we use: levels(df$Condition) NULL Now, we change the order, sorting the factors according to the median of “value” and we verify the order: df <- df %>% mutate(Condition = fct_reorder(Condition, value, .fun='median')) levels(df$Condition) [1] "LARG" "wt" "TIAM" Let’s plot the data: ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) The factors on the x-axis are now sorted according to the median of value. It is also possible to manually set the sequence, in this example the order is set to wt, LARG, TIAM: df <- df %>% mutate(Condition = fct_relevel(Condition, c("LARG", "TIAM", "wt"))) ggplot(df, aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) In the examples above, we have modified the dataframe, since we used mutate() to change the order. To set the order for plotting without altering the dataframe we can define the reordering within ggplot: ggplot(df, aes(x=fct_reorder(Condition, value, .fun='median'), y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) Alternatively, we can use the pipe operator to feed the data in the reordering function and then use the reordered dataframe for plotting: df %>% mutate(Condition = fct_reorder(Condition, value, .fun='median')) %>% ggplot(aes(x=Condition, y=value)) + geom_boxplot(outlier.colour = NA) + geom_quasirandom(width=0.3, alpha=0.5) We can check that the order of the levels in the dataframe has not changed and differs from the order in the plot: levels(df$Condition) [1] "LARG" "TIAM" "wt" 3.6 Adjusting the layout Details matter, also in data visualization. Editing labels, adding titles or annotating data can make the difference between a poor and a clear data visualization. Although it can be quicker and easier to edit a plot with software that deals with vectors, it is not reproducible. And when you need to change the graph, the editing starts all over again. Luckily, with ggplot2, you have full control over every element. A lot of elements are controlled by the function theme(), and examples are the label size and color, the grid, the legend style and the color of the plot elements. This level of control offers great power, but it can be quite daunting (and non-intuitive) for new users. We discuss a couple of straightforward manipulations of the theme below. More detailed modifications of the layout will be showcased in the chapter with Complete Protocols. 3.6.1 Themes Let’s look at a violinplot and we plot it with the default theme, which has a grey background: p <- ggplot(df, aes(x=Condition, y=value)) + geom_violin(aes(fill=Condition), alpha=0.5) + geom_boxplot(width=0.1, outlier.color = NA) + theme_grey() p The default theme is OK-ish and we can change it to one of the other themes that are available in the ggplot2 package, for instance theme_classic(): p + theme_classic() The ggplot2 package has a default dark theme, but that only generate a dark background in the plot area. I made a customized theme theme_darker() for plots on dark background, e.g. black slides. It needs to be loaded with the source() function and then it can be applied: source("https://raw.githubusercontent.com/JoachimGoedhart/PlotTwist/master/themes.R") p + theme_darker() Finally, we can modify the text size of all text elements: p + theme_bw(base_size = 16) To reset the theme to the default that is used throughout the book: p <- p + theme_light() 3.6.2 Legend The legend can be controlled through the theme() function. Legends are automatically created when different colors or shapes are used. One example is the plot below, where different conditions are shown in different colors. To change the style, we define the plot object p: To remove the legend we use: p + theme(legend.position = "none") Other options are “top”, “left”, “bottom” and (the default) “right”. The items of the legend can also be displayed horizontally, which is a nice fit when the legend is shown on top of the plot: p + theme(legend.position = "top", legend.direction = "horizontal") To left align the legend: p + theme(legend.position = "top", legend.direction = "horizontal", legend.justification='left') 3.6.3 Grids I am not a big fan of grids, so I often remove it: p + theme(panel.grid = element_blank()) To only remove the vertical grid and make the horizontal grid more pronounced: p + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_line(size=0.5, color='grey30'), panel.grid.minor.y = element_line(size=0.2, color='grey30') ) 3.6.4 Labels/Titles Clear labeling aids the interpretation of the plot. The actual labels and titles are changed or added with the function labs() and their style is controled with the theme() function. Let’s first look at the labels. The titles of the axes and legend are retrieved from the column names in the dataframe. To adjust the axis labels with labs(): p + labs(x='Perturbation', y='Area [µm]') Note that the title of the legend is not changed. To change the legend title we need to supply a label for ‘fill’, since the legend in this example indicates the color that was used to ‘fill’ the violin plots: p + labs(x='Perturbation', y='Area [µm]', fill='Perturbation:') A title, subtitle and caption can also be added with labs(): p + labs(x='Condition', y='Area [µm]', title='This is the title...', subtitle='...and this is the subtitle', caption='A caption is text at the bottom of the plot') The style of the different labels can be set with theme(): p + labs(x='Condition', y='Area [µm]', title='This is the title...', subtitle='...and this is the subtitle', caption='A caption is text at the bottom of the plot') + theme(axis.title.x = element_text(size=16, color='black'), axis.title.y = element_text(size=16, color='black'), axis.text = element_text(size=14, color='orange'), plot.title = element_text(size=18, color='slateblue'), plot.subtitle = element_text(size=12, color='slateblue', hjust = 1), plot.caption = element_text(size=10, color='grey60', face = "italic") ) This is a demonstration of how the different pieces of text can be modified, not a template for a proper data visualization since it uses too many, unnecessary, colors! 3.7 Plot-a-lot - continuous data It can be a challenge to look at individual data or samples instead of summaries when you have a large amount of data. I will illustrate a number of options based on the timeseries data of Rac activity, that we have seen before. This dataset is still quite simple, but given its heterogeneity it illustrates well how the data can be presented in such a way that all traces can be inspected. df_Rac <- read.csv("df_S1P_combined_tidy.csv") %>% filter(Condition == 'Rac') %>% filter(!is.na(activity)) head(df_Rac) Condition Treatment Time object activity 1 Rac S1P 0 Cell 01 1.0012160 2 Rac S1P 0 Cell 02 1.0026460 3 Rac S1P 0 Cell 03 1.0022090 4 Rac S1P 0 Cell 04 0.9917870 5 Rac S1P 0 Cell 05 0.9935569 6 Rac S1P 0 Cell 06 0.9961453 We have seen this data before, but let’s look at this again in an ordinary line plot: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line(aes(color=object)) There is a lot to see here and it is a bit of mess. Clearly, there is variation, but it is difficult to connect a line, by its color to the cell it represents. Below, there are some suggestions how this data can be presented more clearly. 3.7.1 Small multiples Small multiples remind me of a stamp collection, where every stamp is a (small) plot. This works very well to display lots of data. It is also pretty straightforward in ggplot2 with facet_wrap(): ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object) I got rid of color, since it would be redundant and the improved contrast of the black line helps to focus on the data. The lay-out of the 32 mini plots can be improved by fixing the number of columns: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object, ncol = 8) Since the small multiple is at its best, when the data stands out and the text and other elements are minimized. Here is an extreme version of the plot to make that point: ggplot(data=df_Rac, aes(x=Time, y=activity)) + geom_line() + facet_wrap(~object, ncol = 8) + theme_void() Further optimization of a small multiple plot is discussed in Protocol 3. For complex experimental designs, the data can split according to two different factors. This also uses a faceting strategy, with the facet_grid() function. This works well when the data has two discrete variables and the application of this function is demonstrated in Protocol 4. 3.7.2 Heatmaps Heatmaps are well suited for dense data and have traditionally been used for microarray and other -omics data. Heatmaps can also be used for timeseries data. To do this, we (i) keep the x-axis as is, (ii) map the objects on the y-axis and (iii) specify that the color of the tile reflects activity: ggplot(data=df_Rac, aes(x=Time, y=object)) + geom_tile(aes(fill=activity)) The default colorscale is not ideal. I personally like the (colorblind friendly) viridis scale and this colorscale can be used to fill the tile with scale_fill_viridis_c(). To sort the data according to the object labels as they appear in the dataframe: ggplot(data=df_Rac, aes(x=Time, y=object)) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() To reverse the order of the objects we can use fct_rev(): ggplot(data=df_Rac, aes(x=Time, y=fct_rev(object))) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() A heatmap does not need a grid and usually has no axes. Plus, when there are many objects, it makes sense to hide their names, ticks and the y-axis label: p <- ggplot(data=df_Rac, aes(x=Time, y=fct_rev(object))) + geom_tile(aes(fill=activity)) + scale_fill_viridis_c() + theme(text = element_text(size=16), # Remove borders panel.border = element_blank(), # Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), # Remove text of the y-axis axis.text.y = element_blank(), # Remove ticks on y-axis axis.ticks.y = element_blank(), # Remove label of y-axis axis.title.y = element_blank(), # Make x-axis ticks more pronounced axis.ticks = element_line(colour = "black") ) p 3.7.3 Custom objects The use of titles, captions and legends will add infomration to the data visualization. Tweaking the theme will improve the style of the plot and give it the right layout. There’s another layer of attributes that are not discussed yet and these are custom objects and labels. These additions will help to tell the story, i.e. by explaining the experimental design. Let’s look at the cellular response to stimulation with a ligand. The df_Rho dataframe that we have used earlier is used in this example and we plot the average and standard deviation: p <- ggplot(data=df_Rho, aes(x=Time, y=activity)) + stat_summary(fun = mean, geom='line', size=2) + stat_summary(fun.min=function(y) {mean(y) - sd(y)}, fun.max=function(y) {mean(y) + sd(y)}, geom='ribbon', color='black', size =.1, alpha=0.2) p The ligand is added at t=1.75 and we can add a vertical line with geom_vline() to indicate this: p + geom_vline(xintercept = 1.75, size=1, color="grey20") More flexible labeling is provided with the annotate() function, which enables the addition of line segments, rectangles and text. First, let’s reproduce the the previous plot with this function, by defining a line segment. The line segment has two coordinates for the start and two for the end. The x position is 1.75 for both start and end. For the y-coordinate we can use Inf and -Inf to define the endpoints of the line. The use of Inf has two advantages. We do not need to define the exact points for the start and end and we prevent rescaling of the plot to show the segment: p + annotate("segment", x = 1.75, xend = 1.75, y = -Inf, yend = Inf, size=1, color="grey20") In a similar way we can define a rectangle to highlight the time where the ligand was present (It is possible to use Inf for xmax here, in that case the blue rectangle would fill up the entire plot to the right). Since the rectangle is added as the last layer, it would occlude the data. That’s why a an alpha level of 0.1 is used to make the rectangle transparent: p + annotate("rect", xmin = 1.75, xmax = 10, ymin = -Inf, ymax = Inf, fill="blue", alpha=0.1) We can also add an rectangle to the top of the graph: p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.26, ymax = 1.27, fill="black") + annotate("text", x=5, y=1.29, label="ligand", size=6) In the example above, the rectangle and text are added to the plot area and the y-axis is expanded. To move the annotation out of the plot area, we need to increase the white space above the plot with theme() and we can scale the plot with coord_cartesian(): p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.25, ymax = 1.26, fill="black") + annotate("text", x=5, y=1.28, label="ligand", size=6) + coord_cartesian(ylim = c(0.98,1.23), clip = 'off') + theme(plot.margin = margin(t = 50, r = 0, b = 0, l = 0, unit = "pt")) The annotation is part of the plot and would normally be invisible since everything outside the plot area is clipped. To show the annotation, clip = 'off' is needed in the code above. However, this may lead to undesired behavior when the scaling is set in such a way that the data falls outside the plot area. Although you could use it to create a dramatic ‘off-the-charts’ effect. p + annotate("rect", xmin = 1.75, xmax = 10, ymin = 1.25, ymax = 1.26, fill="black") + annotate("text", x=5, y=1.28, label="ligand", size=6) + coord_cartesian(ylim = c(0.98,1.15), clip = 'off') + theme(plot.margin = margin(t = 130, r = 0, b = 0, l = 0, unit = "pt")) This concludes a couple examples of the annotate() function. Protocol 5 is a good example how these annotations can assist to build an informative data visualization. "],["complete-protocols.html", "Chapter 4 Complete protocols 4.1 Protocol 1 - Spectra of fluorescent proteins 4.2 Protocol 2 - A superplot of calcium concentrations 4.3 Protocol 3 - small multiples of time courses 4.4 Protocol 4 - Plotting data from a 96-wells experiment 4.5 Protocol 5 - A map of amino acids 4.6 Protocol 6 - Heatmap style visualization of timelapse data 4.7 Protocol 7 - Ridgeline plot 4.8 Protocol 8 - Plotting data in a 96-wells layout 4.9 Protocol 9 - A dose response curve with fit 4.10 Protocol 10 - Plotting data that was harvestd with a Google form 4.11 Protocol 11 - Plotting time data from a Google form 4.12 Protocol 12 - Plotting grouped data", " Chapter 4 Complete protocols This chapter showcases several complete protocols for different kinds of data visualizations. Each protocol starts with the raw data and ends with a publication quality plot. The data is available from Github in the ‘/data’ folder on this page. The github page holds a separate Rmarkdown file for each protocol. To reproduce the data visualizations you can either take the data and follow the instructions in the chapter. Alternatively you can download the Rmarkdown file (and the data) and run it step by step. The Rmarkdown files can also be used as a starting point to apply the same visualization to your own data. An overview of the data visualizations that are generated by the protocols: 4.1 Protocol 1 - Spectra of fluorescent proteins This protocol describes how you can turn a csv with spectral data that is obtained from FPbase.org into a plot of those spectra. First, we load the required package: library(tidyverse) For this data visualization, I selected several spectra from fluorescent proteins at FPbase.org: https://www.fpbase.org/spectra/?s=1746,6551,101,102,123,124,1604,1606&showY=0&showX=1&showGrid=0&areaFill=1&logScale=0&scaleEC=0&scaleQY=0&shareTooltip=1&palette=wavelength The data was downloaded in CSV format (by clicking on the button in the lower right corner of the webpage) and renamed to ‘FPbase_Spectra_4FPs.csv’. We read the data from the CSV by using the read_csv() function. This function is part of the tidy verse and loads the data as a tibble. It also guesses type of data for each column. To hide that information, we use show_col_types = FALSE here. df_raw <- read_csv("data/FPbase_Spectra_4FPs.csv", show_col_types = FALSE) Let’s briefly look at what we have loaded: glimpse(df_raw) Rows: 512 Columns: 9 $ Wavelength <dbl> 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310… $ `mTurquoise2 EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mTurquoise2 EX` <dbl> 0.2484, 0.2266, 0.2048, 0.1852, 0.1634, 0.1482, 0.132… $ `mNeonGreen EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mNeonGreen EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mScarlet-I EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `mScarlet-I EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `miRFP670 EM` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… $ `miRFP670 EX` <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… The data needs conversion to a tidy format before plotting. Since we have a single continuous data column with Wavelength information that is used for the x-axis, it is excluded from the operation: df_1 <- pivot_longer( df_raw, cols = -Wavelength, names_to = "Sample", values_to = "Intensity" ) There are several rows that have NA values for Intensity and this is how to get rid of that: df_1 <- df_1 %>% drop_na(Intensity) The column ‘Sample’ has labels for the fluorescent protein and the type of spectrum. We can separate that column into two different columns that we name ‘Fluorescent Protein’ and ‘Spectrum’: df_1 <- df_1 %>% separate(Sample, c("Fluorescent Protein", "Spectrum"), sep = " ") Let’s do a first attempt and plot the data: ggplot( data = df_1, aes(x = Wavelength, y = Intensity, color = `Fluorescent Protein`) ) + geom_line(aes(linetype = Spectrum), size = 1) This looks pretty good already. Now let’s change the order of the fluorescent proteins to their order in the plot: df_1 <- df_1 %>% mutate(`Fluorescent Protein` = forcats::fct_relevel( `Fluorescent Protein`, c("mTurquoise2", "mNeonGreen", "mScarlet-I", "miRFP670") )) The data is in the right shape now, so let’s save it: df_1 %>% write.csv("protocol_1.csv", row.names=FALSE) We define the plot object and add an extra geometry, geom_area() to fill the area under the curves: p <- ggplot( data = df_1, aes( x = Wavelength, y = Intensity, fill = `Fluorescent Protein` ) ) + geom_line(aes(linetype = Spectrum), size = 0.5, alpha = 0.5 ) + geom_area( aes(linetype = Spectrum), color = NA, position = "identity", size = 1, alpha = 0.5 ) Let’s check the result: p Next, we set the limits of the axis and force the y-axis to start at 0 p <- p + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.1)) + scale_x_continuous(expand = c(0,0), limits = c(350, 810)) Add labels: p <- p + labs( title = "Spectra of Fluorescent Proteins", x = "Wavelength [nm]", y = "Normalized Intensity [a.u.]", caption = "@joachimgoedhart\\n(based on data from FPbase.org)", tag = "Protocol 1" ) Modify the layout by adjusting the theme. Comments are used to explain effect of the individual lines of code: p <- #Set text size p + theme_light(base_size = 14) + theme( plot.caption = element_text( color = "grey80", hjust = 1 ), #Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), #Set position of legend legend.position = "top", legend.justification = "left" #Define the legend layout ) + guides( linetype = "none", fill = guide_legend(title = NULL, label.position = "right") ) p We are almost there, except that the colors of the plot do not match with the natural colors of the fluorescent proteins. Let’s fix that by defining a custom color palette. The order of the colors matches with the order of the fluorescent proteins that was defined earlier: custom_colors <- c("blue", "green", "orange", "red") To apply the custom colors to the filled area: p <- p + scale_fill_manual(values = custom_colors) This is the result: p To save this plot as a PNG file: png(file=paste0("Protocol_01.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.2 Protocol 2 - A superplot of calcium concentrations This protocol is used to create a superplot which differentiates between technical and biological replicates. The concept of superplots has been reported by Lord and colleagues (Lord et al., 2021). We will use the data that was used to create figure 5e in a publication by van der Linden et al. (2021). The figure in the publication summarizes the data from all experiments and does not identify the biological replicates. Below, we will differentiate the biological replicates, by treating each batch of neutrophils as a biological replicate. We start by loading the required tidyverse package: library(tidyverse) We define the confidence level as 95%: Confidence_level <- 0.95 The data is stored in an excel sheet and we read it, skipping the first 6 lines which contain comments: df_raw <- readxl::read_excel('data/figure5.xlsx', skip=6) Let’s look at the data: head(df_raw) # A tibble: 6 × 7 `Experimental day` `Replicate no.` `Neutrophil no.` `Batch no. neutrop…` Stage <dbl> <dbl> <dbl> <dbl> <chr> 1 1 1 1 1 befo… 2 1 1 1 1 befo… 3 1 1 1 1 befo… 4 1 1 1 1 befo… 5 1 1 1 1 befo… 6 1 1 1 1 befo… # … with 2 more variables: `dF/F0` <chr>, `Calcium (uM)` <dbl> The data is already in a tidy format. The column with ‘Stage’ has the four different conditions for which we will compare the data in the column ‘Calcium (uM)’. We change the name of the column ‘Batch no. neutrophils’ to ‘Replicate’ and make sure the different replicates are treated as factors (qualitative data): df_raw <- df_raw %>% mutate(Replicate = as.factor(`Batch no. neutrophils`)) Let’s look at the data, and identify the biological replicates, as suggested in the original publication on Superplot by (Lord et al., 2021). In this example a color code is used to label the replicates: ggplot(data=df_raw, aes(x=Stage)) + geom_jitter(data=df_raw, aes(x=Stage, y=`Calcium (uM)`, color=Replicate)) To display the statistics for the individual biological replicates, we define a new dataframe. To this end, we group the data for the different stages and biological replicates: df_summary <- df_raw %>% group_by(Stage, Replicate) %>% summarise(n=n(), mean=mean(`Calcium (uM)`)) `summarise()` has grouped output by 'Stage'. You can override using the `.groups` argument. Next, we use ‘df_summary’ which holds the averages of each biological replicate, and we calculate the statistics for the different conditions: df_summary_replicas <- df_summary %>% group_by(Stage) %>% mutate(n_rep=n(), mean_rep=mean(mean), sd_rep = sd(mean)) %>% mutate(sem = sd_rep / sqrt(n_rep - 1), `95%CI_lo` = mean_rep + qt((1-Confidence_level)/2, n_rep - 1) * sem, `95%CI_hi` = mean_rep - qt((1-Confidence_level)/2, n_rep - 1) * sem, NULL) The dataframe has the summary of the conditions and note that each condition has a summary of 4 biological replicates: head(df_summary_replicas) # A tibble: 6 × 10 # Groups: Stage [2] Stage Replicate n mean n_rep mean_rep sd_rep sem `95%CI_lo` <chr> <fct> <int> <dbl> <int> <dbl> <dbl> <dbl> <dbl> 1 before 1 38 0.0305 4 0.0301 0.00414 0.00239 0.0225 2 before 2 67 0.0270 4 0.0301 0.00414 0.00239 0.0225 3 before 3 56 0.0358 4 0.0301 0.00414 0.00239 0.0225 4 before 4 55 0.0270 4 0.0301 0.00414 0.00239 0.0225 5 crawling 1 7 0.0296 4 0.0317 0.00339 0.00196 0.0255 6 crawling 2 29 0.0289 4 0.0317 0.00339 0.00196 0.0255 # … with 1 more variable: `95%CI_hi` <dbl> We can now add or ‘bind’ the data of ‘df_summary_replicas’ to the original dataframe ‘df’ and store this as a dataframe ‘df_2’: df_2 <- df_raw %>% left_join(df_summary_replicas, by = c("Stage","Replicate")) Let’s save this data: df_2 %>% write.csv("protocol_2.csv", row.names=FALSE) Let’s first define a basic plot with all of the data for each stage shown as a violinplot: p <- ggplot(data=df_2, aes(x=Stage)) + geom_violin(data=df_2, aes(x=Stage, y=`Calcium (uM)`), color=NA, fill="grey80") This is what it looks like: p We add the 95% confidence interval from the summary of the biological replicates as a line: p <- p + geom_linerange(data = df_2, aes(ymin=`95%CI_lo`, ymax=`95%CI_hi`), size=1, alpha=0.8) And we add the mean value of each replicate as a dot. Here, the size of the dot is reflecting n: p <- p + geom_point(data=df_2, aes(x=Stage, y=mean, size=n, fill=Replicate), shape=21, stroke = 1) The function scale_size_area() ensures that 0 is represented as an area of 0 and allows to to define that an n of 10,50 and 90 is shown in the legend: p <- p + scale_size_area(breaks = c(10, 50, 90), max_size = 6) This is what that looks like: p Next, one of my favorite tweaks for discrete conditions is to rotate the plot 90 degrees. At the same time, the limits are defined. p <- p + coord_flip(ylim = c(0.02,0.09)) + # This ensures correct order of conditions when plot is rotated 90 degrees scale_x_discrete(limits = rev) Rotation improves readability of the labels for the conditions, even when they are long. It also easier to read the different calcium levels: p To guide the interpretation, a line is added as a threshold of 0.06 µM (=60 nM): p <- p + geom_hline(yintercept = 0.060, linetype='dotted') Adjusting the axis labels and adding a title and caption: p <- p + labs( title = "Calcium concentrations are less than 60 nM", subtitle = "at different stages of transendothelial migration", x = "Stage", y = "Calcium [µM]", caption = "@joachimgoedhart\\n(based on data from van der Linden, DOI: 10.1101/2021.06.21.449214)", tag = "Protocol 2" ) The layout it further optimized. The most tricky part is positioning of the label for the different conditions. It is placed right above the conditions, which I really like. However, getting this right involves a bit of trial and error and I recommend playing with the parameters to see how it affects the positioning. Something similar applies to the legend which is moved into the lower right corner of the plot, although this is eassier to accomplish. The comments explain the effect of the different lines: p <- #Set text size p + theme_classic(base_size = 16) + theme( plot.caption = element_text( color = "grey80", hjust = 1 ), #Set position of legend to lower right corner legend.position = c(0.88,0.15), #This line positions the label ('title') of the conditions axis.title.y = element_text(vjust = 0.98, angle = 0, margin=margin(l=70)), #This line positions the names of the conditions #A negative margin is needed for aligning the y-axis 'title' with the 'text' axis.text.y = element_text(vjust = 0.5, hjust=1, angle = 0, margin=margin(l=-90, r=5)), #Move 'tag', so its position partially overlaps with the conditions plot.tag.position = c(0.06,0.99) ) + guides(fill = "none", size = guide_legend(title = 'n per replicate', label.position = "left") ) p To save the plot as a PNG file: png(file=paste0("Protocol_02.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.3 Protocol 3 - small multiples of time courses This protocol displays a number of different timecourses as ‘small multiples’. Small multiples, as the name suggests, displays many small plot separately as a stamp collection. By stressing the data, rather than the labels and grids, this can be a powerful visualization strategy. The data is taken from a publication by Arts et al. (2021) and we recreate figure panel 1F. The original figure is in small multiple format, but we tweak it a bit more to increase the focus on the data. Let’s first load the necessary package: library(tidyverse) The data comes from an excel file: df_raw <- readxl::read_excel("data/Data_Arts_Circularity.xlsx") head(df_raw) # A tibble: 6 × 13 time `neutro 1` `neutro 2` `neutro 3` `neutro 4` `neutro 5` `neutro 6` <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 0 0.53 0.54 0.55 0.59 0.58 0.34 2 10 0.44 0.6 0.5 0.4 0.54 0.4 3 20 0.33 0.55 0.64 0.3 0.48 0.41 4 30 0.35 0.54 0.69 0.28 0.52 0.32 5 40 0.41 0.53 0.57 0.23 0.44 0.29 6 50 0.32 0.4 0.4 0.26 0.43 0.25 # … with 6 more variables: `neutro 7` <dbl>, `neutro 8` <dbl>, # `neutro 9` <dbl>, `neutro 10` <dbl>, `neutro 11` <dbl>, `neutro 12` <dbl> It is in a wide format, so we need to make it tidy. The parameter that was measured over time is the ‘roundness’ of cells: df_3 <- pivot_longer( df_raw, cols = -time, names_to = "Cell", values_to = "Roundness" ) The data is in the right shape now, so let’s save it: df_3 %>% write.csv("protocol_3.csv", row.names = FALSE) First we create a line plot of all the data: p <- ggplot(df_3, aes(x=time, y=Roundness, group=Cell)) + geom_line() p With the facet_wrap() function, we turn this into a small multiple: p <- p + facet_wrap(~Cell) p Set the limits of the axis and force the y-axis to start at 0 p <- p + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.0)) + scale_x_continuous(expand = c(0,0), limits = c(0, 300)) Use a minimal theme and remove the strips and grid to increase focus on the data: p <- p + theme_minimal(base_size = 14) p <- p + theme(strip.background = element_blank(), strip.text = element_blank(), plot.caption = element_text(color = "grey80"), #Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) p I do not like the repeated axis for the different plots. We can remove those: p <- p + theme( #Remove axis labels axis.text = element_blank() ) p This is a very minimal plot, focusing entirely on the data. It may work well, but it is informative to add some information about the scaling of the x- and y-axis. To achieve this, I add lines to the lower left plot, which correspond to the data of ‘neutro 6’ (you can see this in the small multiple plot where each plot was labeled). I define a new dataframe with the x- and y-scale for ‘neutro 6’ to do just that: ann_line<-data.frame(xmin=0,xmax=300,ymin=0,ymax=1, Cell=factor("neutro 6",levels=c("neutro 6"))) ann_line xmin xmax ymin ymax Cell 1 0 300 0 1 neutro 6 This dataframe can now be used to draw two lines with geom_segment(): p <- p + #Vertical line geom_segment(data=ann_line, aes(x=xmin,xend=xmin,y=ymin,yend=ymax), size=2, color='grey40') + #Horizontal line geom_segment(data=ann_line, aes(x=xmin,xend=xmax,y=ymin,yend=ymin), size=2, color='grey40') + NULL p The plot is now in black and white which gives it a strong contrast. We can make it a bit more soft and pleasant to look at by changing to shades of grey. Also, the labels of the axes are moved next to the lines: p <- p + theme(panel.background = element_rect(fill='grey98', color=NA), panel.border = element_rect(color='grey90', fill=NA), axis.title.x = element_text(size=14, hjust = 0, color='grey40'), axis.title.y = element_text(size=14, vjust = 0, hjust=0, angle = 90, color='grey40'), ) Finally, we add a title, caption, and labels (and a scale in brackets): p <- p + labs( title = "Changes in the shape of migrating cells over time", x = "Time [300s]", y = "Circularity [0-1]", caption = "@joachimgoedhart\\n(based on data from Arts et al., DOI: 10.3389/fimmu.2021.667213)", tag = "Protocol 3" ) p png(file=paste0("Protocol_03.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.4 Protocol 4 - Plotting data from a 96-wells experiment This protocol showcases some serious data wrangling and tidying. One reason is that the data is acquired with a 96-wells plate reader and the data is stored according to the layout of the plate. This makes total sense from a human perspective, but it is not well suited for data visualization. In addition, the plate is measured twice. One measurement is the luminescence from a luciferase and the other measurement is the luminescence from Renilla. The latter reading serves as a reference and therefore, the luciferase data is divided by the Renilla intensities. A final step before the data is visualized is a normalization to a control condition. The code that is shown here is also the basis for the plotXpress app that can be used to process and visualize the data. In fact, the data visualization is very close to the standard output of plotXpress and uses the same example data. We start by loading a package that we need: library(tidyverse) The measured data is read from an excel sheet. Note that this is the raw data that is stored by the software that operates the plate reader: df_raw <- readxl::read_excel("data/DualLuc_example_data.xlsx", sheet = "Results") New names: • `` -> `...1` • `` -> `...2` • `` -> `...3` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` • `` -> `...12` • `` -> `...13` • `` -> `...14` • `` -> `...15` • `` -> `...16` • `` -> `...17` The experimental conditions for each well are stored in a separate CSV file, generated by the experimentalist that did the experiment: df_design <- read.csv("data/Tidy_design.csv") head(df_design) Wells condition treatment1 treatment2 1 A01 - HEK - 2 B01 - HEK - 3 C01 - HEK - 4 D01 - HEK - 5 E01 - neuron - 6 F01 - neuron - You can see that the design file is tidy. In contrast the excel file with data is far from tidy. In the excel sheet, two ‘rectangles’ of cells define the data for the firefly & renilla reads. The data is subset and converted to a vector firefly <- df_raw[19:26,6:17] %>% unlist(use.names = FALSE) renilla <- df_raw[40:47,6:17] %>% unlist(use.names = FALSE) Define a dataframe with wells column <- rep(1:12, each=8) row <- rep(LETTERS[1:8],12) For convenience, all numbers should consist of 2 digits and so we add a zero that precedes the single digit numbers: x0 <- str_pad(column, 2, pad = "0") To generate a unique index for each row in the dataframe, we define ‘Wells’, which combines the row and column index: Wells <- paste0(row,x0) Next, we create a dataframe that holds the data of individual columns, rows and wells: df_plate <- data.frame(column,row,Wells) head(df_plate) column row Wells 1 1 A A01 2 1 B B01 3 1 C C01 4 1 D D01 5 1 E E01 6 1 F F01 Add to df_plate the vectors with data from firefly and renilla reads df_4 <- data.frame(df_plate,firefly,renilla) Merge the design with the data, based on the well ID - left_join() is used to add only data for wells that are listed in the design dataframe df_4 <- left_join(df_design, df_4, by='Wells') head(df_4) Wells condition treatment1 treatment2 column row firefly renilla 1 A01 - HEK - 1 A 2010 2391540 2 B01 - HEK - 1 B 3210 2391639 3 C01 - HEK - 1 C 1965 2390991 4 D01 - HEK - 1 D 2381 2391774 5 E01 - neuron - 1 E 1292 269021 6 F01 - neuron - 1 F 991 268918 Calculate the relative expression from the firefly/renilla ratio df_4 <- df_4 %>% mutate(expression=firefly/renilla) Take all control conditions and calculate the average value df_norm <- df_4 %>% filter(condition == "-") %>% group_by(treatment1,treatment2) %>% summarise(mean=mean(expression)) `summarise()` has grouped output by 'treatment1'. You can override using the `.groups` argument. Combine the mean values (needed for normalization) values with the df_4 dataframe df_4 <- df_4 %>% full_join(df_norm, by=c("treatment1","treatment2")) %>% na.omit(condition) Calculate the Fold Change by normalizing all measurements against the control (-) df_4 <- df_4 %>% mutate(`Fold Change` = expression/mean) The result is a dataframe that holds all the necessary data: head(df_4) Wells condition treatment1 treatment2 column row firefly renilla expression 1 A01 - HEK - 1 A 2010 2391540 0.0008404626 2 B01 - HEK - 1 B 3210 2391639 0.0013421758 3 C01 - HEK - 1 C 1965 2390991 0.0008218350 4 D01 - HEK - 1 D 2381 2391774 0.0009954954 5 E01 - neuron - 1 E 1292 269021 0.0048025991 6 F01 - neuron - 1 F 991 268918 0.0036851382 mean Fold Change 1 0.0009999922 0.8404692 2 0.0009999922 1.3421863 3 0.0009999922 0.8218414 4 0.0009999922 0.9955032 5 0.0040858977 1.1754085 6 0.0040858977 0.9019164 The data is in the right shape now, so let’s save it: df_4 %>% write.csv("protocol_4.csv", row.names = FALSE) Based on the dataframe, we can create a plot with jittered dots that show the data: p <- ggplot(df_4, aes(x=condition, y=`Fold Change`)) + geom_jitter(width = 0.2, alpha=0.5, size=3) To splot the graphs based on treatment1 (vertical) and treatment2 (horizontal) we use the facet_grid() function: p <- p + facet_grid(treatment1~treatment2) We add a horizontal line for mean value: p <- p + stat_summary(fun.min=mean, fun.max=mean, geom='errorbar', width=0.6, size=0.5) Add labels: p <- p + labs( title = "Effect of DNA sequences on reporter levels under different conditions", subtitle = "The expression level was determined by a dual luciferase assay\\n and the values were normalized to a control with no DNA sequence (-)", x = "DNA Sequence", y = "Fold change of the reporter relative to the control (-)", caption = "@joachimgoedhart\\n(based on data from Brandorff et al., DOI: 10.1101/2021.07.08.451595)", tag = "Protocol 4" ) Set the theme and font size: p <- p + theme_light(base_size = 14) Format the facet labels (strips) and the caption + subtitle p <- p + theme(strip.background = element_rect(fill="grey90", color="grey50"), strip.text = element_text(color="grey50"), plot.caption = element_text(color = "grey80"), plot.subtitle = element_text(color = "grey50", face = "italic"), #Remove the grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) Let’s look at the result: p To save the plot as a png file: png(file=paste0("Protocol_04.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.5 Protocol 5 - A map of amino acids This data visualization plots the position of amino acids in a given protein. It is inspired by figure 2A of the paper by Basu et al. (2020) Let’s load the tidyverse package: library(tidyverse) First, we define a vector with the 20 amino acids and the order in which we plot them. The amino acids are grouped as hydrophobic (G,A,V,C,P,I,L,M,F,W), hydrophilic (S,T,Y,N,Q), acidic (D,E) and basic (R,H,K). amino_acid_ordered <- strsplit("GAVCPILMFWSTYNQDERHK","") %>% unlist() amino_acid_ordered [1] "G" "A" "V" "C" "P" "I" "L" "M" "F" "W" "S" "T" "Y" "N" "Q" "D" "E" "R" "H" [20] "K" The protein sequence that we will use is the Homo sapiens Homeobox protein Hox-D13: protein <- c("MSRAGSWDMDGLRADGGGAGGAPASSSSSSVAAAAASGQCRGFLSAPVFAGTHSGRAAAA AAAAAAAAAAASGFAYPGTSERTGSSSSSSSSAVVAARPEAPPAKECPAPTPAAAAAAPP SAPALGYGYHFGNGYYSCRMSHGVGLQQNALKSSPHASLGGFPVEKYMDVSGLASSSVPA NEVPARAKEVSFYQGYTSPYQHVPGYIDMVSTFGSGEPRHEAYISMEGYQSWTLANGWNS QVYCTKDQPQGSHFWKSSFPGDVALNQPDMCVYRRGRKKRVPYTKLQLKELENEYAINKF INKDKRRRISAATNLSERQVTIWFQNRRVKDKKIVSKLKDTVS") The protein sequence may contain end-of-line characters “” after copy pasting and we need to remove these. The gsub() function can be used: gsub("\\n", "", protein) [1] "MSRAGSWDMDGLRADGGGAGGAPASSSSSSVAAAAASGQCRGFLSAPVFAGTHSGRAAAAAAAAAAAAAAASGFAYPGTSERTGSSSSSSSSAVVAARPEAPPAKECPAPTPAAAAAAPPSAPALGYGYHFGNGYYSCRMSHGVGLQQNALKSSPHASLGGFPVEKYMDVSGLASSSVPANEVPARAKEVSFYQGYTSPYQHVPGYIDMVSTFGSGEPRHEAYISMEGYQSWTLANGWNSQVYCTKDQPQGSHFWKSSFPGDVALNQPDMCVYRRGRKKRVPYTKLQLKELENEYAINKFINKDKRRRISAATNLSERQVTIWFQNRRVKDKKIVSKLKDTVS" But we can also use str_replace_all() from the {tidyverse} package: protein <- protein %>% str_replace_all("\\n", "") Next, the protein sequence is split into single characters and we assign this vector to aa: aa <- strsplit(protein, "") %>% unlist() We generate a dataframe with a column with the amino acids and a column that defines their position: df_5 <- data.frame(aa=aa, position=1:length(aa)) Now we reorder the data frame to the order of the amino acids that we defined earlier in the vector amino_acid_ordered: df_5 <- df_5 %>% mutate(aa = fct_relevel(aa, amino_acid_ordered)) The basic plot shows a black tile for each amino acid. Note that the y-axis order is defined by the vector amino_acid_ordered, but it needs to be reverted to order the amino acids from top to bottom along the y-axis (which is naturally starts at the bottom it corresponds to the origin). The data is in the right shape now, so let’s save it: df_5 %>% write.csv("protocol_5.csv", row.names = FALSE) p <- ggplot() + geom_tile(data=df_5, aes(x=position, y=aa)) + scale_y_discrete(limits = rev(amino_acid_ordered)) p Set the theme to classic, to get rid off the ‘frame’ around the plot and the grid. p <- p+theme_classic(base_size = 16) For each of the four classes of amino acids we can define a box with a color that indicates the class. For example, there are three basic residues that will have a rectangle filled with blue in the background. The amino acids are factors, but we need numbers to define the coordinates for the rectangle. In a plot with a factors (here on the y-axis) their position is defined by a (non visible) natural number. Therefore we can define a box with the function annotate() for the first residue with y-coordinates ymin=0.5 and ymax=1.5: p + annotate(geom = "rect", xmin = -Inf, ymin = 0.5, xmax = Inf, ymax=1.5, fill='blue', alpha=0.4) In this way, we define four colored rectangles that reflect the different amino acids categories; blue=basic, red=acidic, yellow=hydrophilic, grey=hydrophobic: p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 0.5, xmax = Inf, ymax=3.5, fill='blue', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 3.5, xmax = Inf, ymax=5.5, fill='red', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 5.5, xmax = Inf, ymax=10.5, fill='yellow', alpha=0.15) p <- p + annotate(geom = "rect", xmin = -Inf, ymin = 10.5, xmax = Inf, ymax=20.5, fill='black', alpha=0.15) Let’s look at the result: p Adjusting the axis labels and adding a title and caption: p <- p + labs( title = "Mapping the amino acid positions of HOXD13", subtitle = "shows a high abundance of alanines in the IDR", y = "Amino acid", caption = "@joachimgoedhart | based on data from Basu et al, DOI: 10.1016/j.cell.2020.04.018", tag = "Protocol 5" ) And a final tweak of the label style and location: p <- p + theme( plot.caption = element_text( color = "grey80", hjust = 1 )) In the original paper, a region of the protein is annotated as an ‘intrinsically disordered region’ abbreviated as IDR. Here, we we use the annotate() function to add a rectangle and a label to the top of the plot: p <- p + annotate("rect", xmin=0, xmax=118, ymin=21, ymax=22, fill='darkblue') + annotate("text", x=59, y=23, alpha=1, color='darkblue', size=4,label='IDR') p To avoid clipping of the new label by the subtitle of the plot: p <- p + coord_cartesian(clip = 'off') p The subtitle is quite close to the IDR label. Let’s give the subtitle a bit more room, by adding a margin at the bottom of the subtitle. This can be done with the theme() function to style the subtitle: p <- p + theme(plot.subtitle = element_text(margin = margin(b=20))) p Finally we can save the plot: png(file=paste0("Protocol_05.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.6 Protocol 6 - Heatmap style visualization of timelapse data Lineplots are typically used to plot data from timeseries (also known as longitudinal data). However, in case of many samples/objects, this may result in a cluttered data visualization. To solve this, the same data can be presented as a heatmap, where every row is an object and the response is coded as a color. A downside is that it is less quantitative as it is difficult to ‘read’ the numbers from this kind of visualization. Still, it is a powerful visualization to plot a lot of data and show its dynamics and heterogeneity. The data and visualization is originally published by Chavez-Abiega et al. (2021) The multipurpose {tidyverse} package is used for data wrangling and plotting: library(tidyverse) A CSV file with the data is loaded. Since the file is a couple of Megabytes, we use the faster fread() function from the package data.table: library(data.table) Attaching package: 'data.table' The following objects are masked from 'package:dplyr': between, first, last The following object is masked from 'package:purrr': transpose df_S1P <- data.table::fread("data/ERK_repsonse_to_S1P.csv") head(df_S1P) Time_in_min Ligand Unique_Object CN_ERK Slide 1: 2.5 S1P 100 0.3941 P1 2: 3.0 S1P 100 0.3921 P1 3: 3.5 S1P 100 0.3900 P1 4: 4.0 S1P 100 0.3880 P1 5: 4.5 S1P 100 0.3859 P1 6: 5.0 S1P 100 0.3839 P1 The column ‘CN_ERK’ has the data on the activity that we will plot over time. Each number in the ‘Unique_Object’ column reflects an individual cell measurement and so we can use that to group the measurements using group_by(Unique_Object). We subtract the average baseline activity from each trace by subtracting the data acquired at the first 5 timepoints: CN_ERK[1:5]. The data is stored in a new column with normalized ERK activity data ‘ERKn’: df_sub <- df_S1P %>% group_by(Unique_Object) %>% arrange(Time_in_min) %>% mutate(ERKn=CN_ERK-mean(CN_ERK[1:5])) %>% ungroup() Around Timepoint 23 (minutes), the ligand was added. To set this time point to zero, we subtract a value of 23 (minutes) from each point: df_sub$Time_in_min <- df_sub$Time_in_min-23 The column ‘Unique_Object’ that identifies the individual cells contains natural numbers, but these need to be treated as qualitative data. Therefore, we change the data type in this column to a factor with as.factor(): df_sub <- df_sub %>% mutate(Unique_Object=as.factor(Unique_Object)) To order objects, we need to order ‘Unique_Object’ according to something. That something can be the maximum value of the Erk activity: df_sub <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, max)) Plot the data in heatmap style. We use theme_void here to focus only on the data and we will deal with styling of the axes and labels later: ggplot(df_sub, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + theme_void()+ scale_fill_viridis_c() Can we also sort the data based on something else? Definitely, but it requires a bit of understanding of functions. Previously, we used the maximum value. This is defined by the function max, which takes the maxium value from a vector of numbers. Let’s look at an artificial example: x <- c(1,3,4,5,6,7,9) max(x) [1] 9 Other functions that take a vector as input and return a single value as output can be used. Other existing examples are mean(), sum() and min(). We can also define a function: second <- function(x) {x[2]} second(x) [1] 3 one_but_last <- function(x) {x[length(x)-1]} one_but_last(x) [1] 7 We can use the new function to sort the dataframe: df_sub <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, one_but_last)) ggplot(df_sub, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + theme_void()+ scale_fill_viridis_c() If we want to sort on the sum of the top five values we can define a function: top_five <- function(x) {sum(tail(sort(x),5))} But we can also directly implement the function in the fct_reorder() function: df_6 <- df_sub %>% mutate(Unique_Object = fct_reorder(Unique_Object, ERKn, function(x) {sum(tail(sort(x),5))})) Let’s save this data: df_6 %>% write.csv("protocol_6.csv", row.names=FALSE) p <- ggplot(df_6, aes(x=Time_in_min, y=Unique_Object,fill=ERKn)) + geom_tile() + # scale_x_continuous(breaks=seq(0,60, by=15), labels=seq(0,60, by=15), limits=c(-8,60)) + scale_fill_viridis_c(na.value="black", limits = range(-0.1,1.5)) Let’s look at the plot p Add labels: p <- p + labs( title = "ERK activity is increased by S1P", subtitle = "and varies strongly between cells", x = "Time after addition of S1P (min)", y = "Cells sorted according to response", caption = "@joachimgoedhart | data from Chavez-Abiega, DOI: 10.1101/2021.07.27.453948", tag = "Protocol 6", fill= "ERK C/N ratio" ) The theme_void() would be close to what we want as a theme, but I prefer to start from theme_light and remove the redundant features (grids and y-axis labels): p <- p + theme_light(base_size = 14) + theme(plot.caption = element_text(color = "grey80", hjust = 2.0), plot.title = element_text(hjust = 0.1, margin = margin(t=10)), plot.subtitle = element_text(hjust = 0.1, margin = margin(t=2, b=5)), # Remove background panel.background = element_blank(), # Remove borders panel.border = element_blank(), # Remove grid panel.grid.major = element_blank(), panel.grid.minor = element_blank(), # Remove text of the y-axis axis.text.y = element_blank(), # Remove ticks on y-axis axis.ticks.y = element_blank(), # Remove label of y-axis axis.title.y = element_blank(), # Make x-axis ticks more pronounced axis.ticks = element_line(colour = "black") ) p The caption does not look good in this plot, but it has been optimized to look good in the saved PNG. To get a proper aligned caption in the Rmd you may need to optimize the hjust value in theme((plot.caption = element_text())) To save the plot as PNG: png(file=paste0("Protocol_06.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.7 Protocol 7 - Ridgeline plot In protocol 6 we have seen how time traces can be visualized with a heatmap style data visualization. The advantage is that huge amounts of data can be simultaneously visualized. However, it is difficult to relate the color to numbers. As such the color coded values in a heatmap give a qualitative view of heterogeneity. In this protocol, we use a method that allows more data than an ordinary lineplot, but keeps the advantage of this plot, i.e. allowing a quantitative comparison. To do this, an offset between curves is introduced. A package to this directly in ggplot2 is available ({ggridges}) but it may not work well when the values show a negative and positive deviation from baseline values (usually the baseline is zero). In addition, we have more flexibility (and insight) when we do this ourselves. Load the {tidyverse} package and the data from a CSV file: require(tidyverse) df1 <- read.csv("data/Rac_S1P.csv") head(df1) Time Cell.1 Cell.2 Cell.3 Cell.4 Cell.5 Cell.6 1 0.0000000 1.0012160 1.0026460 1.0022090 0.9917870 0.9935569 0.9961453 2 0.1666667 0.9994997 0.9928106 0.9997658 0.9975348 1.0018910 1.0039790 3 0.3333333 0.9908362 0.9964057 0.9905094 0.9946743 0.9961497 0.9953369 4 0.5000000 0.9991967 0.9972504 0.9972806 1.0074250 1.0060510 1.0062390 5 0.6666667 1.0093450 1.0109910 1.0103590 1.0084080 1.0022130 0.9982496 6 0.8333333 0.9941078 0.9940830 0.9990720 1.0181230 1.0110220 1.0139400 Cell.7 Cell.8 Cell.9 Cell.10 Cell.11 Cell.12 Cell.13 1 0.9964277 1.0006770 0.9999106 1.0043270 1.0086590 1.0074670 0.9875549 2 1.0098780 1.0015050 1.0014380 0.9938114 0.9791933 0.9925425 1.0106440 3 0.9917276 1.0000020 0.9997350 1.0049370 1.0250660 1.0079290 1.0062720 4 1.0039710 1.0046840 0.9976190 0.9971925 1.0008340 0.9975954 1.0050230 5 0.9979655 0.9930890 1.0012990 0.9997435 0.9865567 0.9944269 0.9907017 6 1.0087770 0.9916067 1.0025310 0.9919835 0.9930975 1.0012420 1.0025800 Cell.14 Cell.15 Cell.16 Cell.17 Cell.18 Cell.19 Cell.20 1 0.9941667 0.9931722 0.9918481 0.9973316 0.9976466 0.9982940 0.9954924 2 1.0024420 0.9980425 0.9974822 0.9976164 0.9881339 1.0122250 1.0132220 3 1.0096800 1.0074450 1.0073690 0.9980090 0.9980346 0.9923310 0.9891400 4 1.0007800 0.9995486 1.0018860 1.0064760 1.0073410 0.9959588 0.9984370 5 0.9930816 1.0018040 1.0014300 1.0006490 1.0088410 1.0013600 1.0040700 6 1.0117190 1.0082190 1.0092750 1.0018410 0.9976196 1.0008680 1.0013100 Cell.21 Cell.22 Cell.23 Cell.24 Cell.25 Cell.26 Cell.27 1 1.0024980 0.9986917 0.9987728 0.9988987 1.0019450 0.9954534 1.0025060 2 1.0022340 1.0023420 0.9963444 0.9969288 0.9990684 0.9973828 0.9944580 3 1.0003150 1.0014660 0.9985501 0.9983435 0.9944611 0.9987581 0.9935282 4 0.9969226 0.9956030 1.0020300 1.0063250 1.0036700 1.0056470 1.0065540 5 0.9980916 1.0018990 1.0042990 0.9995825 1.0009020 1.0028340 1.0031070 6 0.9993777 1.0041500 0.9984087 1.0016190 1.0007090 1.0022360 1.0007950 Cell.28 Cell.29 Cell.30 Cell.31 Cell.32 1 0.9957569 0.9852318 1.0007450 0.9927866 0.9871355 2 0.9952635 0.9931840 1.0030060 0.9977890 1.0028110 3 0.9976221 1.0010230 0.9998598 1.0029210 0.9985340 4 1.0068090 1.0139990 0.9968880 1.0026060 1.0039670 5 1.0046560 1.0070850 0.9995161 1.0039100 1.0076550 6 1.0073290 1.0128910 1.0000250 1.0025260 0.9998251 The data is not tidy, so it needs to be re-arranged: df_tidy <- pivot_longer(df1, cols = -c(Time), names_to = "Cell", values_to = "Activity") head(df_tidy) # A tibble: 6 × 3 Time Cell Activity <dbl> <chr> <dbl> 1 0 Cell.1 1.00 2 0 Cell.2 1.00 3 0 Cell.3 1.00 4 0 Cell.4 0.992 5 0 Cell.5 0.994 6 0 Cell.6 0.996 In the next step, we create a new dataframe ‘df_rank’ to order the traces. We group the data by ‘Cell’ and extract the data from a specified time window with filter(). The filtered data is used to integrate the activity by using the function sum(). This summed value is used to generate a rank, ranging from 0 to 1: df_rank <- df_tidy %>% group_by(Cell) %>% filter(Time>=2 & Time <=10) %>% summarise(amplitude=sum(Activity)) %>% mutate(rank=percent_rank(amplitude)) head(df_rank) # A tibble: 6 × 3 Cell amplitude rank <chr> <dbl> <dbl> 1 Cell.1 50.3 0.742 2 Cell.10 50.9 0.806 3 Cell.11 49.8 0.645 4 Cell.12 50.3 0.774 5 Cell.13 49.6 0.548 6 Cell.14 49.4 0.484 We can add the rank information from ‘df_rank’ to the ‘df_tidy’ dataframe: df_7 <- as.data.frame(full_join(df_tidy, df_rank,by="Cell")) This data is saved: df_7 %>% write.csv("protocol_7.csv", row.names=FALSE) Let’s make a lineplot of this data and use the rank to shift the data plotted on the y-axis: ggplot(df_7, aes(x=Time, y=Activity+(rank*1), group=Cell, height = rank)) + geom_line(alpha=0.5, size=0.5) We can use the rank to shift the plot also in the horizontal direction: p <- ggplot(df_7, aes(x=Time+(rank*10), y=(Activity+(rank*1)), group=Cell)) + geom_line(alpha=0.5, size=0.5) p Add labels: p <- p + labs( title = "Activities measured in single cells over time", subtitle = "Sorting of the cells is based on integrated activity", x = "Time [min]", y = "Activity [arbitrary units]", caption = "@joachimgoedhart | data from Reinhard et al; doi: 10.1091/mbc.E17-03-0136", tag = "Protocol 7" ) If we would like to use color, this would be a way to do that: p + geom_line(aes(color=as.factor(rank))) + theme(legend.position = "none") Although it looks flashy, we do not really need color here. So we stick to black and white and make some adjustments to the layout by tweaking the theme settings. To remove the grid and show the axis: p <- p + theme_classic(base_size = 16) p <- p + theme(panel.grid.major = element_blank(), plot.caption = element_text(color = "grey80"), panel.grid.minor = element_blank(), NULL) p To give it more of a 3D feel we can add a third axis by defining a line: p <- p + annotate(geom = "segment", x=0,y=1,xend=10,yend=2, size=1) The next step is to remove the original x-axis, which is a bit too long and also replace that with a line that runs until 20 (minutes): p <- p + theme(axis.line.x = element_blank(), axis.title.x = element_text(hjust = 0.3) ) + annotate(geom = "segment", x=0,y=1,xend=20,yend=1, size=1) p Finally, we can use scale_x_continuous() to improve two aspects of the x-axis. First, the labels run up to 30, but we can set the scale to 0-20 with breaks = c(0,20). Second, the default in ggplot is add a bit of margin to the plot, that’s why the x-axis does not touch the y-axis. This can be solved by using expand = c(0, 0): We can manually add two p <- p + scale_x_continuous(breaks = c(0,10,20), expand = c(0, 0)) p To save the plot as PNG: png(file=paste0("Protocol_07.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.8 Protocol 8 - Plotting data in a 96-wells layout This protocol displays data from a 96-wells plate in the same format as the plate. This data visualization of 96-well plate data is also used in the plotXpress app. We start by loading a package that we need: library(tidyverse) A good example of data wrangling related to 96-wells data is given in protocol 4. Here we start from the tidy data that was the result of data tiyding in the section Data in 96-wells format: df_8 <- read.csv("data/df_tidy_wells.csv") head(df_8) X column row Well Intensity 1 1 1 A A1 2010 2 2 1 B B1 3210 3 3 1 C C1 1965 4 4 1 D D1 2381 5 5 1 E E1 1292 6 6 1 F F1 991 We can construct a basic plot where each well is represented by a large dot and the color used to fill the dot represents the intensity. This is much like a heatmap, but it uses a dot instead of a tile: ggplot(data=df_8, aes(x=column, y=row)) + geom_point(aes(color=Intensity), size=10) There is a couple of things that need to be fixed. First, we invert the row names, to put the row ‘A’ at the top. In addition, the column names are depicted as factors (this can also be achieved by mutating the dataframe): p <- ggplot(data=df_8, aes(x=as.factor(column), y=fct_rev(row))) + geom_point(aes(color=Intensity), size=10) p Let’s change the color palette that displays intensity to viridis. The numbers in the legend are high and that is why they are difficult to read quickly. So we use the scales package to use the scientific notation: p <- p + scale_x_discrete(position = "top") + scale_color_viridis_c(label = scales::scientific) p In my opinion, the scientific notation does not work well, so let’s try to use commas as a thousands separator: p <- p + scale_x_discrete(position = "top") + scale_color_viridis_c(label = scales::comma) Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. Scale for 'colour' is already present. Adding another scale for 'colour', which will replace the existing scale. p This is a bit better, but the numbers need to be right aligned: p <- p + theme(legend.text.align = 1) p This looks better, now add the labels (and we skip the labels for the x- and y-axis): p <- p + labs( title = "Readings from a 96-wells plate", subtitle = NULL, x = NULL, y = NULL, caption = "\\n@joachimgoedhart\\nbased on data from Brandorff et al., DOI: 10.1101/2021.07.08.451595", color= 'Intensity [a.u.]', tag = "Protocol 8" ) p Set the theme and font size: p <- p + theme_light(base_size = 14) Note that this overrides any previously defined modifications of the theme() function, such as the alignment of the legend labels. So we need to define this again. p <- p + theme(legend.text.align = 1) We also adjust the theme settings for the other elements: p <- p + theme(plot.caption = element_text(color = "grey80"), plot.subtitle = element_text(color = "grey50", face = "italic"), #Remove the grid panel.grid.major = element_blank(), panel.grid.minor = element_blank() ) Let’s look at the result: p To save the plot as a png file: png(file=paste0("Protocol_08.png"), width = 3000, height = 2000, units = "px", res = 400) p + coord_fixed() dev.off() quartz_off_screen 2 4.9 Protocol 9 - A dose response curve with fit In this protocol we visualize the data that was used to make a ‘dose reponse curve’. The data consists of some response that is measured at different concentrations of a compound that induces the effect (agonist). This is a typical experiment in pharmacology to understand the relation between the dose and the response. One of the relevant parameters is the ‘Half maximal effective concentration’ abbreviated as EC50. This is the concentration at which 50% of the maximal response is measured and we obtain this value by curve fitting. In this protocol we use data acquired from single cells from different biological replicates. We generate a ‘superplot’ (Lord et al., 2021) to distuinguish technical and sample replicates. More details about the experimental approach are published by Chavez-Abiega et al. (2022). We start by loading the {tidyverse} package: library(tidyverse) Read the data: df_DRC <- read.csv("data/DRC_Histamine.csv", stringsAsFactors = TRUE) head(df_DRC) X Unique_Unique_Object Experiment Aktnac ERKnac Condition Concen 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 The concentration is listed in the column ‘Concen’, the measured response is in the column ‘ERKnac’ and the column ‘Experiment’ identifies the replicates. Let’s rename the columns for easier identification of what they represent: df_DRC <- df_DRC %>% rename(Concentration=Concen, Response=ERKnac) head(df_DRC) X Unique_Unique_Object Experiment Aktnac Response Condition Concentration 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 To change the column ‘Experiment’ from text into a number that represents the replicate, we can convert it using as.numeric(). Since we need these numbers as qualitative data (a label), we convert the numbers to a factor with as.factor(): df_DRC <- df_DRC %>% mutate(Replicate=as.factor(as.integer(Experiment))) head(df_DRC) X Unique_Unique_Object Experiment Aktnac Response Condition Concentration 1 1 12 20200122 P1 0.0558 -0.2106 PTx 0 2 2 15 20200122 P1 0.2458 -0.1424 PTx 0 3 3 16 20200122 P1 0.0412 -0.2493 PTx 0 4 4 22 20200122 P1 -0.1194 -0.1980 PTx 0 5 5 23 20200122 P1 0.1838 -0.1540 PTx 0 6 6 25 20200122 P1 0.3291 -0.7078 PTx 0 Replicate 1 1 2 1 3 1 4 1 5 1 6 1 The range of concentrations at which the compound is examined spans a few orders of magnitude and therefore a log scale is used to display the concentrations. The minimal response is usually measured at a concentration of 0, but the logarithm of 0 is undefined. Therefore, plotting 0 on a logscale will give an error. The logarithm of 0 can be approached by minus infinity. Therefore, we convert the concentration of 0 to a low value, in this case 0.01: df_DRC <- df_DRC %>% mutate(Concentration = ifelse((Concentration == 0), yes = 0.01, no = Concentration) ) Next we take the ‘Response’ and calculate the average per concentration and for each biological replicate and store that information in a new dataframe: df_summary <- df_DRC %>% group_by(Concentration, Replicate) %>% summarise(mean_Response=mean(Response)) `summarise()` has grouped output by 'Concentration'. You can override using the `.groups` argument. We can define a plot that shows the data with geom_jitter() and the average with a large dot with geom_point(). Each replicate has its own color and the data is plotted on a log scale with scale_x_log10(): p <- ggplot(data = df_DRC, aes(x = Concentration, y = Response)) + geom_jitter(aes(x = Concentration, y = Response, color=Replicate), width=0.2, size=2, shape=16, alpha=0.2) + geom_point(data=df_summary, aes(x = Concentration, y = mean_Response, fill=Replicate), size=8, shape=21, alpha=0.8) + scale_x_log10() p Adjusting the theme and the y-axis scale improves the plot: p <- p + ylim(-1,6) + theme_light(16) p Add labels: p <- p + labs( title = "Responses of individual cells to Histamine", x = "Histamine concentration [µM]", y = "Response [arbitrary units]", caption = "@joachimgoedhart\\nbased on data from Chavez-Abiega et al., DOI: 10.1242/jcs.259685", tag = "Protocol 9" ) + theme(plot.caption = element_text(color = "grey80")) And to label the different replicates with a colorblind friendly palette, we define a set of colors that were proposed by Paul Tol: https://personal.sron.nl/~pault/ Tol_bright <- c('66CCEE', '#BBBBBB', '#CCBB44','#AA3377','#228833', '#4477AA') To use these colors we define manual color scales for both ‘fill’ (used for geom_point()) and ‘color’ (used for geom_jitter()): p <- p + scale_fill_manual(values = Tol_bright) + scale_color_manual(values = Tol_bright) p The result is a dose response curve in which the replicates are clearly identified with colorblind friendly colors. The EC50 can be determined from fitting a curve. To this end, we use the function nls(), which needs an equation, the data and estimates of the values. It will perform a ‘nonlinear least squares’ optimization to find parameters for the equation that best fit with the data of ‘df_summary’. The parameters are ‘bot’, ‘top’, ‘EC50’ and ‘slope’: fit <- nls(mean_Response ~ top+(bot-top)/(1+(Concentration/EC50)^slope), data = df_summary, start=list(bot=-2, top=8, EC50=1, slope=1)) The result is stored in the object ‘fit’ and the parameters can be listed: coef(fit) bot top EC50 slope -0.1990747 3.2915665 0.4968078 0.7141988 To plot the fitted data, we use augment() function that is part of the {broom} package, which we need to load: library(broom) p + geom_line(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1) Instead of geom_lin() for plotting the fit, we can also use geom_smooth(): p <- p + geom_smooth(data = augment(fit), aes(x=Concentration, y=.fitted), color="black", size=1) p `geom_smooth()` using method = 'loess' and formula 'y ~ x' An alternative way to do the curve fit is provided through the {drc} package. To demonstrate this, we load the package and add the curve fit to the data: library(drc) Loading required package: MASS Attaching package: 'MASS' The following object is masked from 'package:dplyr': select 'drc' has been loaded. Please cite R and 'drc' if used for a publication, for references type 'citation()' and 'citation('drc')'. Attaching package: 'drc' The following objects are masked from 'package:stats': gaussian, getInitial p + geom_smooth(data=df_summary, aes(x = Concentration, y = mean_Response), color='blue', method = drm, method.args = list(fct = L.4()), se = FALSE) `geom_smooth()` using method = 'loess' and formula 'y ~ x' `geom_smooth()` using formula 'y ~ x' The {drc} package was used to fit the data in the paper by Chavez-Abiega et al. (2022). But the approach followed above with nls() is easier to adapt for data that requires other models for the fit. Finally, we can save the plot: png(file=paste0("Protocol_09.png"), width = 4000, height = 3000, units = "px", res = 400) p `geom_smooth()` using method = 'loess' and formula 'y ~ x' dev.off() quartz_off_screen 2 4.10 Protocol 10 - Plotting data that was harvestd with a Google form The goal of this script is to read data that was generated by a Google form, transform it into a tidy format and plot the data. The form contains data that is submitted by students after doing a course on cell biology. The data that is submitted are length measurements on cells and in the end, we will plot these date. First, we need the {tidyverse} package: library(tidyverse) The data from the Google form are stored in a Google sheet that was published on the web as a CSV. This was achieved by ‘File > Share > Publish to web’ and selecting to ‘Publish’ as ‘Comma-separated values’. After clicking on ‘Publish’ a link is generated that can be read as a csv, and any empty cells are converted to NA. Below is the outcommented code that loads the online google sheet. To make sure that this script works even when the google sheet is no longer active and to ensure a reproducible data visualization, I downloaded a snapshot (made on 21st of April, 2022) of the google sheet as a csv file and I’ll load that insetad: # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") df_sheet <- read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) Tijdstempel Groep 1 <NA> <NA> 2 <NA> <NA> 3 <NA> <NA> 4 <NA> <NA> 5 <NA> <NA> 6 01/03/2021 15:42:23 B Resultaten.van.de.10.metingen..in.µm...van.de.celkleuring..methyleenblauw. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 71.2, 50.7, 51.0 Resultaten.van.de.10.metingen..in.µm...van.de.kernkleuring..DAPI. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.9, 11.7, 13.2 There are a number of issues with this data. The first 5 rows are empty. I deleted the values in these rows, since they were dummy values from testing the form. Let’s remove rows without data: df_sheet <- df_sheet %>% na.omit() The header names are still in the original language (Dutch) and the third and fourth header names with the relevant data are very long. Let’s change the names: colnames(df_sheet) <- c("Timestamp", "Group", "Cell", "Nucleus") All the length measurements are distributed over two columns, let’s make it tidy and move it to one column: df_tidy <- pivot_longer( df_sheet, cols = -c("Timestamp", "Group"), names_to = "Sample", values_to = "Size" ) head(df_tidy) # A tibble: 6 × 4 Timestamp Group Sample Size <chr> <chr> <chr> <chr> 1 01/03/2021 15:42:23 B Cell 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 7… 2 01/03/2021 15:42:23 B Nucleus 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.… 3 01/03/2021 23:50:53 A Cell 57.7, 64.9, 44.8, 60.8, 46.8, 70.1, 67.8, 7… 4 01/03/2021 23:50:53 A Nucleus 9.6, 7.1, 8.7, 9.5, 8.1, 6, 8.3, 5.5, 7.8, … 5 02/03/2021 17:09:52 B Cell 14.839,17.578,9.054,16.218,14.724,12.410,14… 6 02/03/2021 17:09:52 B Nucleus 2.792,1.819,2.275,2.426,2.263,2.159,3.056,2… The column with measurements contains up to 10 length measurements. The values are separated by a comma and often a space. First, the space is removed and then each row is split into multiple rows, where each row has a single measurement. The comma is used to separate the values: df_tidy <- df_tidy %>% mutate(Size = gsub(" ", "", Size)) %>% separate_rows(Size, sep=",") The ‘Size’ column values are converted to the class numeric. The advantage is that anything that is not a number will be converted to NA. These non-numeric data can stem from incorrectly enetered data. Examples of these incorrect data are numbers with units or with wrong separators. df_tidy <- df_tidy %>% mutate(Size = as.numeric(Size)) Finally, we can filter any values that fall outside the range of expected values (and this will also remove the cells with NA): df_size <- df_tidy %>% filter(Size>0 & Size<1000) head(df_size) # A tibble: 6 × 4 Timestamp Group Sample Size <chr> <chr> <chr> <dbl> 1 01/03/2021 15:42:23 B Cell 64.6 2 01/03/2021 15:42:23 B Cell 52.5 3 01/03/2021 15:42:23 B Cell 79.4 4 01/03/2021 15:42:23 B Cell 48.4 5 01/03/2021 15:42:23 B Cell 66 6 01/03/2021 15:42:23 B Cell 64.4 The dataframe is cleaned and tidy and so it is ready for visualization. The primary information is the distribution of size measurements for the measurements of cells and cell nuclei. This can be achieved by using geom_density(). Given the range of sizes, it makes sense to use a log10 scale for the x-axis: ggplot(df_size, aes(x=Size, fill=Sample))+geom_density(alpha=.8) + scale_x_log10() The geom_density() produces a smooth distribution of the data. I actually prefer to see the real data and that’s why we turn to geom_histogram. I also will split the data according to the sample and groups and this can be achieved with facet_grid(). Here, we use the labeller() function to combine the column name ‘Group’ with the the factor it presents, as this makes it easier to understand what is plotted: ggplot(df_size, aes(x=Size, fill=Sample))+geom_histogram(alpha=.8) + facet_grid(Sample~Group, labeller = labeller(Group=label_both)) + scale_x_log10() `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. The use of color is redundant, since the data is split in Cell and Nucleus anyway, so we remove that. The difference between groups is not large and for the final data visualization I chose to combine the data for all the groups: p <- ggplot(df_size, aes(x=Size)) + geom_histogram(alpha=.5, bins=50) + facet_grid(~Sample) + annotation_logticks(sides="b", outside = TRUE) + scale_x_log10() p The data is presented in a nice way now, and we can improve the axis labels and add a title and caption: p <- p + labs( title = "Distribution of size measurements", subtitle = "Sizes of human cells and nuclei of cells", x = "Size [µm] - log scale", y = "Count", caption = "@joachimgoedhart | data submitted by 4 groups of students", tag = "Protocol 10" ) Optimizing the layout: p <- #Set text size p + theme_light(base_size = 16) + # Change the color and position of the caption theme( plot.caption = element_text( color = "grey80", hjust = 1 ) ) p This looks very decent. But we can edit change the x-axis to display logarithmic space ticks. In addition, I’d like the bars of the histogram to start from the axis and not ‘float’ as in the graph above: p <- p + #Force the y-axis to start at zero scale_y_continuous(expand = c(0, NA), limits = c(0,200)) + #Apply a logarithmic scale to the x-axis and set the numbers for the scale scale_x_log10(breaks = c(1,10,100), limits = c(.5,200)) + #Remove minor gridlines theme(panel.grid.minor = element_blank()) + #Add ticks to the bottom, outside annotation_logticks(sides="b", outside = TRUE) + #Give a little more space to the log-ticks by adding margin to the top of the x-axis text theme(axis.text.x = element_text(margin = margin(t=8))) + #Needed to see the tcks outside the plot panel coord_cartesian(clip = "off") Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale. p To save the plot as a PNG file: png(file=paste0("Protocol_10.png"), width = 3000, height = 2000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.11 Protocol 11 - Plotting time data from a Google form The goal of this script is to read data that was generated by a Google form and visualize the distribution of the hours at which the form was submitted. We need the tidyverse package: library(tidyverse) The data from the Google form are stored in a sheet that was published on the web as a CSV. This was achieved by ‘File > Share > Publish to web’ and selecting to ‘Publish’ as ‘Comma-separated values’. After clicking on ‘Publish’ a link is generated that can be read as a csv. Any empty cells are converted to NA. As explained in protocol 10, we will load a snapshot of the sheet (the code to read the actual sheet is outcommented here): # df_sheet <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSc-nI1-s_u-XkNXEn_u2l6wkBafxJMHQ_Cd3kStrnToh7kawqjQU3y2l_1riLigKRkIqlNOqPrgkdW/pub?output=csv", na.strings = "") df_sheet <- read.csv("data/20220421_Resultaat-metingen.csv", na.strings = "") head(df_sheet) Tijdstempel Groep 1 <NA> <NA> 2 <NA> <NA> 3 <NA> <NA> 4 <NA> <NA> 5 <NA> <NA> 6 01/03/2021 15:42:23 B Resultaten.van.de.10.metingen..in.µm...van.de.celkleuring..methyleenblauw. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 64.6, 52.5, 79.4, 48.4, 66.0, 64.4, 69.8, 71.2, 50.7, 51.0 Resultaten.van.de.10.metingen..in.µm...van.de.kernkleuring..DAPI. 1 <NA> 2 <NA> 3 <NA> 4 <NA> 5 <NA> 6 11.8, 7.8, 7.0, 12.4, 12.7, 14.0, 11.9, 12.9, 11.7, 13.2 Here, we are only interested in the first column with the time data. So we select that column and replace the dutch column name by ‘Timestamp’: df_sheet <- df_sheet %>% dplyr::select("Timestamp"=1) %>% na.omit() We can seperate the Timestamp column in date and time: df_tidy <- df_sheet %>% separate('Timestamp', c("Date", "Time"), sep=" ") Correct handling of date and time data is quite challenging and a topic on its own. The code to format the ‘Date’ column as date (note that we need a capital Y as the year is presented in 4 digits) would be: df_tidy %>% mutate(Date=as.Date(Date, "%d/%m/%Y")) %>% head() Date Time 6 2021-03-01 15:42:23 7 2021-03-01 23:50:53 8 2021-03-02 17:09:52 9 2021-03-03 09:30:43 10 2021-03-03 16:21:32 11 2021-03-03 21:00:23 Here, we avoid the Date format and use the individual numbers. The ‘Date’ column is seperated into three columns for year, month and day. The ‘Time’ column can be split into hour, minute and second: df_tidy <- df_tidy %>% separate('Date', c("day", "month", "year"), sep="/", convert = TRUE) %>% separate('Time', c("hour", "min", "sec"), sep=":", convert = TRUE) head(df_tidy) day month year hour min sec 6 1 3 2021 15 42 23 7 1 3 2021 23 50 53 8 2 3 2021 17 9 52 9 3 3 2021 9 30 43 10 3 3 2021 16 21 32 11 3 3 2021 21 0 23 Note that we use convert = TRUE to ensure that the data is treated as numbers (not as characters). We can use the data to check at what time the data was submitted: ggplot(df_tidy, aes(x=hour))+geom_histogram(alpha=.8) `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. The default number of ‘bins’ is 30, but it makes more sense to use 24 here as there are 24 hours in a day: ggplot(df_tidy, aes(x=hour))+geom_histogram(bins = 24, alpha=.8) Since ‘hour’ is a number that cycles, with 0 followed by 23, it is nice to connect the data from 23 with 0 and we can do that with coord_polar(): ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8) + coord_polar() + scale_x_continuous(breaks=seq(0, 24, by=2)) To center the plot at 0, we need to rotate it by -7.5 degrees (1 hour equal 15 degrees). We can use the start option within coord_polar(), but it only accepts ‘radians’. To convert degrees to radians the value is multiplied by pi/180: ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8) + coord_polar(start = (-7.5*pi/180)) + scale_x_continuous(breaks=seq(0, 24, by=3)) The plot can be rotated to center it around 15h as it reflects the middle of the afternoon, when most activity takes place. To achieve this, we need to shift the start another 15*15 degrees: p <- ggplot(df_tidy, aes(x=hour)) + geom_histogram(bins = 24, alpha=.8, color='black') + coord_polar(start = (-7.5 - 15*15)*pi/180) + scale_x_continuous(breaks=seq(0, 24, by=3)) p This looks good, let’s first improve on the layout by changing the theme. I do not like the grey background, so any theme with a white background is an improvement, for instance theme_minimal(): p + theme_minimal() I do not like the labels that show the count. Since it is clear that the length of the bar indicates an amount and since the absolute amount is not so interesting, these labels can be removed. The labels for the hours are helpful and their sice needs to be increased. Finally, I do not like the grid running through the numbers. I did not find a way in the theme setting to get rid of this, so we define the grid ourselves by using repetitive horizontal and vertical lines: p <- p + geom_hline(yintercept = c(2,4,6,8), colour = "grey90", size = 0.5) + geom_vline(xintercept = seq(0, 21, by=3), colour = "grey90", size = 0.5) + theme_minimal(base_size = 16) + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), axis.text.y = element_blank() ) p The grid looks good, but the bars have to be on top of this layer, so we redefine the plot in the correct order: p <- ggplot(df_tidy, aes(x=hour)) + geom_hline(yintercept = c(2,4,6,8), colour = "grey90", size = 0.5) + geom_vline(xintercept = seq(0, 21, by=3), colour = "grey90", size = 0.5) + geom_histogram(bins = 24, alpha=.8, color='black') + coord_polar(start = (-7.5 - 15*15)*pi/180) + scale_x_continuous(breaks=seq(0, 24, by=3)) + theme_minimal(base_size = 16) + theme(panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), axis.text.y = element_blank() ) + labs( title = "Counting the hours...", subtitle = "that a Google form was submitted", x = "", y = "", caption = "@joachimgoedhart | data submitted by students", tag = "Protocol 11" ) + theme(plot.caption = element_text(color = "grey80", hjust = 1)) p A centered title and subtitle looks nice on this plot: p <- p + theme( plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5) ) p To save the plot as a PNG file: png(file=paste0("Protocol_11.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 4.12 Protocol 12 - Plotting grouped data This protocol explains how data can be plotted side-by-side. It is a remake of a figure that was published by de Man et al. (2021). The source data is published with the paper and can be downloaded. Next to the tidyverse package we need readxl to import the excel file: library(tidyverse) library(readr) Next, we download the xls file from the url, store it as a (temporary) file, and use read_excel() to import the data (note that unlike the read.csv() we cannot directly download the data from a url): url_xls <- "https://cdn.elifesciences.org/articles/66440/elife-66440-fig5-data1-v2.xlsx" # file_xls <- basename(url_xls) download.file(url = url_xls, destfile = 'temp_file') df_download <- readxl::read_excel('temp_file') New names: • `` -> `...2` • `` -> `...3` • `` -> `...4` • `` -> `...5` • `` -> `...6` • `` -> `...7` • `` -> `...8` • `` -> `...9` • `` -> `...10` • `` -> `...11` Inspection of the dataframe shows that we can remove the first 11 rows and that the name of the columns is in the 12th row. First we fix the column names: colnames(df_download) <- df_download %>% slice(12) Then, we can remove the first 12 frames and select only the first 3 columns (I use dplyr:: here to make explicit that the select() function is taken from the {dplyr} package. This may not be necessary when you run your own code): df_tidy <- df_download %>% slice(-(1:12)) %>% dplyr::select(1:3) head(df_tidy) # A tibble: 6 × 3 Sample `Measurement date` `Total SGFP2-CTNNB1 concentration` <chr> <chr> <chr> 1 B10 WNT3A c1 cyto 180926 250.188126820392 2 B10 WNT3A c2 cyto 180926 243.40459000116601 3 B10 WNT3A c3 cyto 180926 233.140028430596 4 B10 WNT3A c3 nucleus 180926 377.33830720940603 5 B10 WNT3A c4 cyto 180926 256.42702997341098 6 B10 WNT3A c4 nucleus 180926 379.44318769572499 The third column, containing the measurement data has the class <chr>, but the correct class is numeric. Here, we mutate the column and rename it. To keep the data that is untouched, we add .keep = \"unused\": df_tidy <- df_tidy %>% mutate(`SGFP2-CTNNB1` = as.numeric(`Total SGFP2-CTNNB1 concentration`), .keep = "unused") Finally, we need to separate the first column, since it contains the relevant data on the conditions and the grouping of the data: df_tidy <- df_tidy %>% separate(`Sample`, c("Celltype", "ligand", "number", "compartment"), sep=" ") head(df_tidy) # A tibble: 6 × 6 Celltype ligand number compartment `Measurement date` `SGFP2-CTNNB1` <chr> <chr> <chr> <chr> <chr> <dbl> 1 B10 WNT3A c1 cyto 180926 250. 2 B10 WNT3A c2 cyto 180926 243. 3 B10 WNT3A c3 cyto 180926 233. 4 B10 WNT3A c3 nucleus 180926 377. 5 B10 WNT3A c4 cyto 180926 256. 6 B10 WNT3A c4 nucleus 180926 379. There are two compartments (nucleus and cytoplasm) and two ligands (BSA as a control and WNT3A). To avoid abbreviated labels in the plot, we will rename the ‘cyto’ condition: df_tidy <- df_tidy %>% mutate(compartment = case_when(compartment == "cyto" ~ "cytoplasm", TRUE ~ compartment) ) head(df_tidy) # A tibble: 6 × 6 Celltype ligand number compartment `Measurement date` `SGFP2-CTNNB1` <chr> <chr> <chr> <chr> <chr> <dbl> 1 B10 WNT3A c1 cytoplasm 180926 250. 2 B10 WNT3A c2 cytoplasm 180926 243. 3 B10 WNT3A c3 cytoplasm 180926 233. 4 B10 WNT3A c3 nucleus 180926 377. 5 B10 WNT3A c4 cytoplasm 180926 256. 6 B10 WNT3A c4 nucleus 180926 379. This data can be plotted in a number of different ways. The first way is by comparing the different compartments for each ligand: ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = compartment)) + geom_boxplot(outlier.color = NA) + geom_jitter() However, in the original figure, the data is split between the two compartments and the two ligands are plotted next to eachother: ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = compartment)) + geom_boxplot(outlier.color = NA) + geom_jitter() + facet_wrap(~compartment) This is close to the original figure, but the colors in that figure reflect the ligand, not the compartment: p <- ggplot(df_tidy, aes(x=ligand, y=`SGFP2-CTNNB1`, fill = ligand)) + geom_boxplot(outlier.color = NA) + geom_jitter() + facet_wrap(~compartment) p This plot looks good. Now let’s improve the theme. p <- p + theme_linedraw(base_size = 16) + theme(panel.spacing = unit(0, "points")) p The theme is pretty nice, but the black strips are very distracting. Let’s change the fill and color (border) of the strips and change the text to black. At the same time, we remove the grid and the legend: p <- p + theme(strip.background = element_rect(fill=NA, color="black", size = .5), strip.text = element_text(color = 'black'), panel.grid = element_blank(), legend.position = "none", plot.caption = element_text(color='grey80') ) p Finally, we fix the labels: p <- p + labs(x="", y="Concentration [nM]", title = "Total SGFP2-CTNNB1", caption = "@joachimgoedhart | based on data from de Man et al., DOI: 10.7554/eLife.66440", tag = "Protocol 12" ) p To save the plot as a PNG file: png(file=paste0("Protocol_12.png"), width = 4000, height = 3000, units = "px", res = 400) p dev.off() quartz_off_screen 2 In progress This chapter is ‘in progress’ and I plan to add more protocols in the future. "],["questions-and-answers.html", "Chapter 5 Questions and Answers", " Chapter 5 Questions and Answers A list of questions that may arise during the use of R and their answers. When you have questions that remain unanswered, feel free to reach out! What is the difference between a data.frame and a tibble? Both are objects that hold data. The data.frame is the structure supported by basic R and the tibble is an extended variant that is supported by the tidyverse package. Dependig on the function that is used to load data, read.csv() from base R or read_csv() from the tidyverse, the data will be loaded in a data.frame or tibble, respectively. It is possible to convert a classic data.frame to a tibble (which requires the tidyverse pakcage): df <- as_tibble(mtcars) class(df) [1] "tbl_df" "tbl" "data.frame" And to convert a tibble to a data.frame: df <- as.data.frame(df) class(df) [1] "data.frame" What’s up with spaces in variable names and in files names? Spaces are used to separate words (as in this line). When a space would be used between two words, these would be treated as separate entities. Avoiding spaces in filenames has a more technical background. Most filesystems currently accept spaces, but some systems do not. To increase compatibility across systems it is a good habit to use_underscores_instead. What are the rules for naming dataframes or variables? Do not use spaces, stick to characters and numbers. Whenever a variable consists of multiple words, e.g. room temperature there are two options: Add an underscore as separator: room_temperature. Use the ‘camelCase’ notation: roomTemperature. Personally, I prefer an underscore and the abbreviation df for dataframe when multiple dataframes are generated, e.g. df_tidy or df_summary What is the difference between <- and = for assigning variables? R prefers the <- for the assignment of a value to a variable. In RStudio the shortcut is <alt>+<->. It really is a preference since both can be used: x <- 1 y = 2 x + y [1] 3 What does ‘NA’ mean in a dataframe? When no data is available, this is known as a ‘missing value’. In R this is indicated with NA for ‘Not Available’. Empty cells in a CSV file will be converted to NA when the file is loaded. Other characters that can be present in a file (especially xls files) are: “.” or “NaN” or “#N/A” or “#VALUE!”. To convert these strings to NA use: df <- read.csv('FPbase_Spectra.csv', na.strings=c(".", "NaN", "#N/A", "#VALUE!")) What is the beste way to type a ‘%>%’ operator? I prefer to literally type it. The shortcut that works in Rstudio is <shift>+<command>+<M> or <shift>+<control>+<M>. Where do I find the example data? The example data that is used in Chapter 2 and 3 is located on this github page: https://github.com/JoachimGoedhart/DataViz-protocols The data that is used for the protocols in Chapter 4 is located in the subdirectory /Protocols. Is there a way to re-use or adjust the protocols? Instead of copy-pasting and running the code line-by-line, you can download the R Markdown file (.Rmd) from the protocols folder in the Github repository. The R Markdown file (together with the data) can be used to replicate the protocol and to modify it. For more info on R Markdown, see https://rmarkdown.rstudio.com Which packages are included in the {tidyverse} package? You can find this out by first loading the package and then run tidyverse_packages() What is the difference between require() and library() for loading a package? Both functions can be used to load a package. The difference is that require() returns FALSE when the package does not exist and can be used to check whether a package was loaded: if (require("nonexistant") == FALSE) ("This packkage doesn't exist") Loading required package: nonexistant [1] "This packkage doesn't exist" Is it possible to have interactive file selection? In some cases it can be convenient to select a file by point-and-click, although this is not strictly reproducible. This example code shows how this can be achieved by using the function file.choose() inside a function for reading a csv file: df <- read.csv(file.choose(), header = TRUE) "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] diff --git a/ggplot2-geom_point-shapes.R b/ggplot2-geom_point-shapes.R new file mode 100644 index 0000000..f8d52a1 --- /dev/null +++ b/ggplot2-geom_point-shapes.R @@ -0,0 +1,23 @@ +library(tidyverse) + +x <- rep(0:31, 4) +y <- rep(0:3, each=32) +shape <- 0:127 + +df_shapes <- data.frame(x=x, y=y, shape=shape) %>% + filter(!shape %in% c(26:31)) #Shapes 26-31 are not defined, so we'll remove those + +ggplot(data=df_shapes, aes(x,y)) + + geom_point(aes(shape = as.factor(shape)), size=4, fill="blue") + + scale_shape_manual(values = df_shapes$shape) + + geom_label(aes(label=shape), nudge_y = -0.4, size=2, label.size = .2) + + theme_minimal() + + theme(legend.position = "none", + aspect.ratio=1/4, + axis.title = element_blank(), + axis.text = element_blank(), + panel.grid = element_blank() + ) + + scale_y_reverse() + + NULL +