Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

plot plate layout heatmap in r

I am trying to plot a plate layout heatmap in R. The plate layout is simply 8 (row) x 12 (column) circles (wells). Rows are labeled by alphabets and columns by numbers. Each well need to be filled with some color intensity depends upon a qualitative or quantitative variable. The plate layout look like this:

enter image description here

Here is small dataset:

 set.seed (123)
platelay <- data.frame (rown = rep (letters[1:8], 12), coln = rep (1:12, each = 8),
colorvar = rnorm (96, 0.3, 0.2))

   rown coln     colorvar
1     a    1  0.187904871
2     b    1  0.253964502
3     c    1  0.611741663
4     d    1  0.314101678
5     e    1  0.325857547
6     f    1  0.643012997
7     g    1  0.392183241
8     h    1  0.046987753
9     a    2  0.162629430
10    b    2  0.210867606
11    c    2  0.544816359
12    d    2  0.371962765
13    e    2  0.380154290
14    f    2  0.322136543
15    g    2  0.188831773
16    h    2  0.657382627
17    a    3  0.399570096
18    b    3 -0.093323431
19    c    3  0.440271180
20    d    3  0.205441718
21    e    3  0.086435259
22    f    3  0.256405017
23    g    3  0.094799110
24    h    3  0.154221754
25    a    4  0.174992146
26    b    4 -0.037338662
27    c    4  0.467557409
28    d    4  0.330674624
29    e    4  0.072372613
30    f    4  0.550762984
31    g    4  0.385292844
32    h    4  0.240985703
33    a    5  0.479025132
34    b    5  0.475626698
35    c    5  0.464316216
36    d    5  0.437728051
37    e    5  0.410783531
38    f    5  0.287617658
39    g    5  0.238807467
40    h    5  0.223905800
41    a    6  0.161058604
42    b    6  0.258416544
43    c    6  0.046920730
44    d    6  0.733791193
45    e    6  0.541592400
46    f    6  0.075378283
47    g    6  0.219423033
48    h    6  0.206668929
49    a    7  0.455993024
50    b    7  0.283326187
51    c    7  0.350663703
52    d    7  0.294290649
53    e    7  0.291425909
54    f    7  0.573720457
55    g    7  0.254845803
56    h    7  0.603294121
57    a    8 -0.009750561
58    b    8  0.416922750
59    c    8  0.324770849
60    d    8  0.343188314
61    e    8  0.375927897
62    f    8  0.199535309
63    g    8  0.233358523
64    h    8  0.096284923
65    a    9  0.085641755
66    b    9  0.360705728
67    c    9  0.389641956
68    d    9  0.310600845
69    e    9  0.484453494
70    f    9  0.710016937
71    g    9  0.201793767
72    h    9 -0.161833775
73    a   10  0.501147705
74    b   10  0.158159847
75    c   10  0.162398277
76    d   10  0.505114274
77    e   10  0.243045399
78    f   10  0.055856458
79    g   10  0.336260696
80    h   10  0.272221728
81    a   11  0.301152837
82    b   11  0.377056080
83    c   11  0.225867994
84    d   11  0.428875310
85    e   11  0.255902688
86    f   11  0.366356393
87    g   11  0.519367803
88    h   11  0.387036298
89    a   12  0.234813683
90    b   12  0.529761524
91    c   12  0.498700771
92    d   12  0.409679392
93    e   12  0.347746347
94    f   12  0.174418785
95    g   12  0.572130490
96    h   12  0.179948083

Is there is package that can readily do it ? Is it possible write a function in base or ggplot2 or other package that can achieve this target.

like image 902
fprd Avatar asked Nov 28 '22 08:11

fprd


1 Answers

Changing the colour of points of sufficient size, with ggplot2. Note I've implemeted @TylerRinkler's suggestion, but within the call to ggplot. I've also removed the axis labels

ggplot(platelay, aes(y = factor(rown, rev(levels(rown))),x = factor(coln))) + 
     geom_point(aes(colour = colorvar), size =18)  +theme_bw() +
     labs(x=NULL, y = NULL)

enter image description here

And a base graphics approach, which will let you have the x axis above the plot

# plot with grey colour dictated by rank, no axes or labels
with(platelay, plot( x=as.numeric(coln), y= rev(as.numeric(rown)), pch= 19, cex = 2, 
 col = grey(rank(platelay[['colorvar']] ) / nrow(platelay)), axes = F, xlab= '', ylab = ''))
# add circular outline
with(platelay, points( x=as.numeric(coln), y= rev(as.numeric(rown)), pch= 21, cex = 2))
# add the axes
axis(3, at =1:12, labels = 1:12)
axis(2, at = 1:8, labels = LETTERS[8:1])
# the background grid
grid()
# and a box around the outside
box()

enter image description here

like image 179
mnel Avatar answered Dec 14 '22 01:12

mnel