About this code

This is my code that I use to practice data visualization using R. The packages that I have using in code are ggplot2 (https://ggplot2.tidyverse.org/) and highcharter (http://jkunst.com/highcharter/).

I have worked with a lot of microplates, and I wanted a way that could visualize my work. Thankfully, I found a blog post by Brian Connelly (https://www.r-bloggers.com/plotting-microtiter-plate-maps/) on R-bloggers that had what I needed. And I modified the code to suit the needs of my work. When I found out about the highcharter library (http://jkunst.com/highcharter/), I loved how I could turn my ggplot2 graphs into interactive graphs with a little and in some cases more that a little modification.

The code below is my way of starting to make all my R code for data visualization interactive because I love how it makes me interact more with datasets and how it motivates me to program more. Please read Brian Connelly’s blog post on R-bloggers because it contains more information about plotting plate maps and the ggplot2 and highcharter websites for using these libraries.

This example code can be modified by saving the data.frames below to a .csv file as shown in the code directly below. The .csv file can then be modified for different sizes of well plates.

## This code will create a .csv file a 96 Well Plate with the Standard Curve in the H row

Well_Name = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","G1","G2","G3","G4","G5","G6","G7","G8","G9","G10","G11","G12","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12")

Sample_Name = c("Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard", "Standard","Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard")

plateDataFrame = data.frame(Well_Name,Sample_Name)
write.csv(plateDataFrame,file="96WellPlate1.csv",row.names = FALSE)

### The .csv file can then be used in place of the dataframes in the code below.
### Loading the following packages

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(highcharter)
## Highcharts (www.highcharts.com) is a Highsoft software product which is
## not free for commercial and Governmental use

Well plate with the standard curve in row H.

Well_Name = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","G1","G2","G3","G4","G5","G6","G7","G8","G9","G10","G11","G12","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12")

Sample_Name = c("Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard", "Standard","Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard")

plateMap = data.frame(Well_Name,Sample_Name)

plateMap <- mutate(plateMap,
                   Row=as.numeric(match(toupper(substr(Well_Name, 1, 1)), LETTERS)),
                   Column=as.numeric(substr(Well_Name, 2, 5)))


plate= ggplot(data=plateMap, aes(x=Column, y=Row)) +
    geom_point(data=expand.grid(seq(1, 12), seq(1, 8)), aes(x=Var1, y=Var2),
               color="grey90", shape=21) +
    coord_fixed(ratio=(13/12)/(9/8), xlim=c(0.5, 12.5), ylim=c(0.5, 8.5)) +
    scale_y_reverse(breaks=seq(1, 8), labels=LETTERS[1:8]) +
    scale_x_continuous(breaks=seq(1, 12)) +
    labs(title="96 - well Plate Template")

plate + geom_point(aes(colour = factor(Sample_Name)), size = 8)

Some experiments require the use of two sets of standard curves. One standard curve is used as a backup in case something goes wrong with the dilution.

Well_Name = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","G1","G2","G3","G4","G5","G6","G7","G8","G9","G10","G11","G12","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12")

Sample_Name = c("Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_0","Standard_0",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_2","Standard_2",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_4","Standard_4",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_6","Standard_6",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_8","Standard_8",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_10","Standard_10",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Blank","Blank",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Blank","Blank")


plate = data.frame(Well_Name,Sample_Name)

plate1 <- mutate(plate,
                   Row=as.numeric(match(toupper(substr(Well_Name, 1, 1)), LETTERS)),
                   Column=as.numeric(substr(Well_Name, 2, 5)))


thisPlate= ggplot(data=plate1, aes(x=Column, y=Row)) +
    geom_point(data=expand.grid(seq(1, 12), seq(1, 8)), aes(x=Var1, y=Var2),
               color="grey90", shape=21) +
    coord_fixed(ratio=(13/12)/(9/8), xlim=c(0.5, 12.5), ylim=c(0.5, 8.5)) +
    scale_y_reverse(breaks=seq(1, 8), labels=LETTERS[1:8]) +
    scale_x_continuous(breaks=seq(1, 12)) +
    labs(title="96 - well Plate Template")

thisPlate + geom_point(aes(colour = factor(Sample_Name)), size = 8)

Interactive highcharter graph of the ggplot2 graph with 1 Standard Curve.

Note: For the interactive graphs, placing you mouse cursor on the show the information about the “well”. The graph legend is also interactive. Clicking on the legend label will change the information that is shown on the graph.

Well_Name = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","G1","G2","G3","G4","G5","G6","G7","G8","G9","G10","G11","G12","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12")

Sample_Name = c("Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard", "Standard","Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard", "Standard")


Map2 = data.frame(Well_Name,Sample_Name)

plateMap2 <-mutate(Map2,
                   Row=as.numeric(match(toupper(substr(Well_Name, 1, 1)), LETTERS)),
                   Column=as.numeric(substr(Well_Name, 2, 5)))


hchart(plateMap2,"bubble", hcaes(x=Column, y=Row, group = Sample_Name), maxSize = "10%") %>%
  hc_yAxis(min=1, max=8) %>%
  ## There needs to be two A's here because the first "A". I could not figure out how to expand the grid as in ggplot2 with getting a error.
  hc_yAxis(categories = c("A","A", "B", "C", "D", "E", "F", "G", "H")) %>%
  hc_title(text="96 - well Plate Template")

Interactive highcharter graph of the ggplot2 graph with 2 Standard Curves.

Well_Name = c("A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","E1","E2","E3","E4","E5","E6","E7","E8","E9","E10","E11","E12","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","G1","G2","G3","G4","G5","G6","G7","G8","G9","G10","G11","G12","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12")

Sample_Name = c("Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_0","Standard_0",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_2","Standard_2",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_4","Standard_4",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_6","Standard_6",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_8","Standard_8",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Standard_10","Standard_10",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Blank","Blank",
                "Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Sample","Blank","Blank")


Map2a = data.frame(Well_Name,Sample_Name)

plateMap2a <-mutate(Map2a,
                   Row=as.numeric(match(toupper(substr(Well_Name, 1, 1)), LETTERS)),
                   Column=as.numeric(substr(Well_Name, 2, 5)))


hchart(plateMap2a,"bubble", hcaes(x=Column, y=Row, group = Sample_Name), maxSize = "10%") %>%
  hc_yAxis(min=1, max=8) %>%
  ## There needs to be two A's here because the first "A". I could not figure out how to expand the grid as in ggplot2 with getting a error.
  hc_yAxis(categories = c("A","A", "B", "C", "D", "E", "F", "F", "H")) %>%
  hc_add_theme(hc_theme_db()) %>%
  hc_title(text="96 - well Plate Template: 2 Standard Curves")