Shinyで96(384)-well plateのインターフェースを作ってみた

(以下の記事はR 3.6.3で試しています。)

Rはプロットに関する関数が充実して勘所をつかむと結構いろいろなお絵描きができます。例えば私は以前の記事でこんなアホなことをしています。

menseki.hatenablog.jp

そして、学生時代よく実験で使っていた96(384)-well plateもRで簡単に描けました。実際のコードは以下です。

wellplate <- expand.grid(x = 1:12, y = 1:8) # 96のとき
#wellplate <- expand.grid(x = 1:24, y = 1:16) # 384のとき
xlim <- range(wellplate$x) + c(-2, +2)
ylim <- rev(range(wellplate$y) + c(-2, +2))
plot(wellplate$x, wellplate$y, axes=FALSE, xlab=NA, ylab=NA,
     cex=3, asp=1, xlim = xlim, ylim = ylim)
rect(-1, -1, max(wellplate$x) + 1, max(wellplate$y) + 1)
text(x = 0, y = wellplate$y, LETTERS[wellplate$y])
text(x = wellplate$x, y = 0, as.character(wellplate$x))

f:id:menseki:20220302221522p:plain:w300
96-well plate

96-well plateが描けるのならばこれをShinyのplotOutputに流して96(384)-well plateのインターフェースを作ってみようということで実際に作ってみました。以下のリンクから試すことができるようにしました。思い立ってすぐ突貫工事で作ったので現状バグが結構あると思いますのであしからず。気が向いたら修正していきます。

sabe.shinyapps.io

f:id:menseki:20220302224251g:plain
リンク先アプリ使用の様子(4倍速)

作ってみたはいいものの正直この程度のインターフェースのためにクライアントとサーバ間で何回も通信する設計になってしまっているのは実用的ではないと思っています(wellを選択するたびにその情報をサーバに送ってwell plateの全体図を再描画しています)。

まだjavascriptが書けないのでいつか書けるようになったらクライアン上でのみ処理するバージョンも書いてみたいです。