プレートレイアウトの可視化

# 目的
複数水準で何条件ってなると書くのは配置が大変なことは別にしても、
なかなか苦労で良いツールを探したが見つからない。

<img width="500" alt="image.png (289.9 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/39777762-f610-49e2-bb4d-c7a4e9897a6c.png">

これはパワポで書いているが、こういうのをきれいに自動で書きたい。


# 方針
結果の解析用に各要因でのwellの水準をエクセルファイルに持っているので、
これからタイル可視化でwell毎に水準を、塗・線・中に文字などの属性で書き分けるプログラムを書く。

# 手順
エクセルに、行列状態でデータが入ってます。
各シートが各要因になっており、
別のシートにも、同じ列数・行数で別の要因での水準がついてます。

<img width="500" alt="image.png (12.7 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/179c000e-395e-49e4-b983-d810fe415af3.png">

読み込み

```r
xlsx_file <- "../data/layout.xlsx"

sheets <- readxl::excel_sheets(xlsx_file)

df_xlsx <- sheets %>% 
    map_df( ~ readxl::read_xlsx(xlsx_file,sheet = .x) %>% 
                pivot_longer(cols = -...1) %>% 
                rename(well_row=...1,well_col=name) %>%
                mutate(value=as.character(value),lavel=.x)) %>% 
    pivot_wider(names_from = lavel,values_from = value) %>%
    mutate(well_col=as.factor(as.numeric(well_col)))
```

このようなデータフレームが得られる。
<img width="500" alt="image.png (17.7 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/0ef46e0f-0589-46de-9404-5357f4492f06.png">

96well形式のタイリングで各要因を属性にして可視化

```r
df_xlsx %>% 
    ggplot(aes(x=well_col,y=fct_rev(well_row)))+
    geom_point(aes(colour=Kit,fill=as.factor(FCCP)),shape=22,stroke=5,size=10)+
    geom_text(aes(label=Coating),size=3,angle=20)+
    scale_colour_brewer(palette = "Set2")+
    scale_fill_brewer(palette = "Greens")+
    labs(x=NULL,y=NULL,fill="FCCP[µM]")
```

<img width="500" alt="image.png (102.9 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/1f1137fd-396d-4a52-a831-d8d8387ce7fa.png">

エクセルでのものを思って書いたが正直ごちゃごちゃしている。

実験操作は各要因で行っていくので、ヒトによっては分けたほうが見やすいのではと思った。

```r
df_xlsx %>% pivot_longer(cols = -c(well_row,well_col)) %>% 
    group_nest(name) %>% 
    mutate(g=map2(name,data,~
                      .y %>% 
                      ggplot(aes(x=well_col,y=fct_rev(well_row)))+
                      geom_point(aes(fill=value),shape=22,size=5)+
                      labs(x=NULL,y=NULL,fill=.x))) %>% 
    pull(g) %>% 
    patchwork::wrap_plots()
```

<img width="600" alt="image.png (57.5 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/e78d414a-27d8-4d84-b07e-ee22059447ac.png">

なかなかいいのでは。

# まとめ
分けて書く方法とまとめて書く方法の両者を必要に応じて使い分けていく。
おすすめは、分ける方。要因が増えても使えるのがいい。

# その他
- 今回はplateが1枚にしか対応していないが、増やすことは可能。エクセルの下につなげて行くといいと思います。（気が向いたら作成します）
- エクセルの読み込みに関して、別の方法（最初のシートからwell_row,well_colだけ取り出してbind_cols）を試した。
```r
library(microbenchmark)

xlsx_file <- "../data/layout.xlsx"

sheets <- readxl::excel_sheets(xlsx_file)

res <- microbenchmark::microbenchmark(
    bind = {bind_cols(
        readxl::read_xlsx(xlsx_file) %>% 
            pivot_longer(cols = -...1) %>% 
            select(-value) %>% 
            rename(well_row=...1,well_col=name),
        sheets %>% 
            map_dfc( ~ readxl::read_xlsx(xlsx_file,sheet = .x) %>% 
                         pivot_longer(cols = -...1) %>% 
                         select(value) %>% 
                         rename(!!.x :=value))
    ) %>%
            mutate(well_col=fct_relevel(well_col,levels=c("1","2","3","4","5","6","7","8","9","10","11","12")))},
    straight = {sheets %>% 
            map_df( ~ readxl::read_xlsx(xlsx_file,sheet = .x) %>% 
                        pivot_longer(cols = -...1) %>% 
                        rename(well_row=...1,well_col=name) %>%
                        mutate(value=as.character(value),lavel=.x)) %>% 
            pivot_wider(names_from = lavel,values_from = value) %>% 
            mutate(well_col=fct_relevel(well_col,levels=c("1","2","3","4","5","6","7","8","9","10","11","12")))}
)

autoplot(res)
```
<img width="500" alt="image.png (9.2 kB)" src="https://img.esa.io/uploads/production/attachments/15444/2022/03/29/82644/bb99ca42-bec2-445c-a47e-2ddceea09640.png">

結果としては、本論で扱っていた方が早く、また、全要因の水準パラメーターを文字型に明示的にするので、扱いやすくなると思う。