macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

publication readyなggplot2 プロット出力を行う ggpubr

2020 8/9 誤字修正

2020 10/5 説明追加

2021 8/9 追記

 

ggplot2' パッケージは R でのエレガントなデータ可視化のための優れた柔軟性を持っているが、デフォルトで生成されるプロットは、出版前にいくつかのformatingを必要とする。さらに、'ggplot'をカスタマイズするための構文は不透明であり、高度なRプログラミングスキルを持たない研究者にとっては難易度が高くなる。ggpubr' は、'ggplot2'ベースのpublication readyプロットを作成し、カスタマイズするための使いやすい関数を提供する。 

 

インストール

Rstudio最新版を使ってテストした。

Github 

本体 Github 

install.packages("ggpubr")

#最新版
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")

 

実行方法

1、ライブラリのロード

library("ggpubr")

 

2、データの読み込み

次のような整然構造のフォーマットを読み込む(excelライクな形式は*1参照)。

  genome GC
1 genome1 77
2 genome1 64
3 genome1 70
4 genome1 55
5 genome1 77
6 genome1 76
7 genome1 76
8 genome1 79
9 genome1 71
10 genome2 60
11 genome2 61
12 genome2 59
13 genome2 59
14 genome2 63
15 genome2 64
16 genome2 61
17 genome2 57
18 genome3 91
19 genome3 90
20 genome3 90
21 genome3 97
22 genome3 85
23 genome3 91
24 genome3 83
25 genome3 88

excelライクなフォーマットと違って欠損値(欠損セル)問題が起きない。

 

コピペ読み込み。上の表をコピーして下のコマンドを実行する。

#mac
input <- read.table(pipe("pbpaste"), header = TRUE)

#windows
input <- read.table("clipboard"), header = TRUE)

またはファイルinput.tsvに保存し、データフレームに読み込む。  

#カレント
input <- read.table("input.tsv", header=T, sep="\t")

#ファイルがカレントにないならフルパス指定か. セパレータがコンマならsep=","
input <- read.table("/home/kazu/data/input.csv", header=T, sep=",")

#tiny dataではない行列ファイルならtiny dataに変換する(上のデータでは不要)
reformat <- melt(data = input)

 

3、視覚化

violin plot - Violin plot manual

ggviolin(input, x = "genome", y = "GC", fill = "genome",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "boxplot")

f:id:kazumaxneo:20200301142355p:plain

 

色を青系で統一する。

ggviolin(input, x = "genome", y = "GC", fill = "genome",
palette = "Blues", add = "boxplot")

 

f:id:kazumaxneo:20210809135259p:plain

palette = "rainbow"にすれば虹色で描画される。Bluesやrainbowのように定義済みのカラーパレットについてはこちらが詳しい(リンク)。

 

”DARK2”から3色指定。

library(RColorBrewer)
#色を確認、”DARK2”から3色指定。
display.brewer.pal(3, "Dark2")

#plot
ggviolin(input, x = "genome", y = "GC", fill = "genome",
palette = brewer.pal(3, "DARK2"),
add = "boxplot")

f:id:kazumaxneo:20210809142202p:plain

 

 

box plot - box plot manual

input <- read.table(pipe("pbpaste"), header = TRUE)

ggboxplot(input, x = "genome", y = "GC", color = "genome", palette =c("#00AFBB", "#E7B800", "#FC4E07"), add = "jitter", shape = "genome") 

f:id:kazumaxneo:20200807122419p:plain

 

p-valueを追加

p <- ggboxplot(input, x = "genome", y = "GC", color = "genome", palette =c("#00AFBB", "#E7B800", "#FC4E07"), add = "jitter", shape = "genome")

#一度描画
p

#比較対象を定義
my_comparisons <- list( c("genome1", "genome2"), c("genome2", "genome3"), c("genome1", "genome3") )

#Piarwise比較してp-valueを追加
p + stat_compare_means(comparisons = my_comparisons)

 

f:id:kazumaxneo:20200807123049p:plain

 

#比較対象を定義
my_comparisons <- list( c("genome1", "genome2"), c("genome2", "genome3"), c("genome1", "genome3") )

#global p-valueを求めた結果も追加.label.y = 120でy=120の位置に追加
p + stat_compare_means(comparisons = my_comparisons) + stat_compare_means(label.y = 120)  

f:id:kazumaxneo:20200807123409p:plain

 

追記

7つ以上データ(ここではgenome)がある場合、手動で色を指定する必要がある。

 

 

Githubやマニュアルには他にも様々な作図例が掲載されています。確認して下さい。

引用

Ggpubr: ‘Ggplot2’ Based Publication Ready Plots

Alboukadel Kassambara

2018 R Package Version 0.2. Available online: https://CRAN.R-project.org/package=ggpubr

 

 *1

下の様なexcelライクなフォーマットの方が見やすいが、全ての列で行数が同じなどの制約がある。さらに、excelライクなフォーマットだとRに読み込んでから一手間かかる。

 

genome1 genome2
77 67
64 54
70 60
55 45
77

67

のようなデータのbar plotを出力するなら

#読み込み
x <- read.table(pipe("pbpaste"), header = TRUE)

#名前、平均、SD
colnames(x) <- c("genome1", "genome2") #カラム名を再アサイン(スキップ可)
xmean <- apply(x, 2, mean) #平均
xsd <- apply(x, 2, sd) #S.D

#プロット
plot <- barplot(bindmean, xlab = "name", ylab = "logFPKM", ylim = c(0, max(xmean + xsd)))

f:id:kazumaxneo:20200301141736p:plain

さらにエラーバーをつける。

arrows(plot, xmean - xsd, b, xmean + xsd, code = 3, lwd = 1, angle = 90, length = 0.1)

 f:id:kazumaxneo:20200301141750p:plain

このように、視覚化まで時間がかかる。整然フォーマットのデータを準備し、さらにggpubrを使うことで煩雑なコードを削減できる。

 

 

参考


 

 

関連

 

2020 11/28