t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】箱ひげ図(box plot)を作成する:「Conditional box plot」 VS 「R view」

こんにちは,@PKです.

KNIMEには様々な可視化用のノードがあることを紹介してきました.
www.t-kahi.com

特にJava scriptで構築されているinteractive nodeは,デフォルトのノードと比べても非常に便利で,可視化したデータを選択して次のノードに流せるのは本当に素晴らしいです.
JavaScript Box Plot Examples – KNIME Community Workflow Hub

ただ,単純な可視化だけの場合はどのノードを使えばいいのか,ということで,
今回は箱ひげ図を「Conditional box plot」 と「R view」ノードを使って作成して比較しました. f:id:t_kahi:20190615093855p:plain

「R Source」でサンプルデータの作成

使用するデータは「R source」で作成しました.
「R source」で作成すると,他の方も簡単に参照できるので,こっちのほうがいいのでは…と最近感じています.

KNIMEでどうやってRを動かすの?という方は下記を参照ください.
【KNIME】Tukeyの多重検定を「R node」で処理・可視化する - t_kahi’s blog

#R source
a1<- c(63,58,64,58,77,66,52,64,49,66) 
a2<- c(64,64,68,61,56,71,64,65,85,75) 
a3<- c(59,87,79,71,65,65,65,71,74,58) 
a4<- c(83,79,65,67,80,72,80,75,72,84) 
data<- data.frame(A=factor(c(rep("a1",10),rep("a2",10),rep("a3",10),rep("a4",10))),y=c(a1,a2,a3,a4)) 

knime.out <- data

出力されたデータは以下の通りで,A列に各条件a1~a4,y列に各条件の時の結果が記載されています.

> data
    A  y
1  a1 63
2  a1 58
3  a1 64
4  a1 58
5  a1 77
6  a1 66
7  a1 52
8  a1 64
9  a1 49
10 a1 66
11 a2 64
12 a2 64
13 a2 68
14 a2 61
15 a2 56
16 a2 71
17 a2 64
18 a2 65
19 a2 85
20 a2 75
21 a3 59
22 a3 87
23 a3 79
24 a3 71
25 a3 65
26 a3 65
27 a3 65
28 a3 71
29 a3 74
30 a3 58
31 a4 83
32 a4 79
33 a4 65
34 a4 67
35 a4 80
36 a4 72
37 a4 80
38 a4 75
39 a4 72
40 a4 84

「Conditional box plot」ノードで箱ひげ図を作成する

「Conditional box plot」の設定画面で,カテゴリーカラムを「A」列,可視化する列を「y」列と設定します.
f:id:t_kahi:20190615095000p:plain また,[general plot options]でタイトルや画像の幅なども自由に設定することができます.
f:id:t_kahi:20190615095010p:plain

実行するとこんな感じの箱ひげ図を描くことができます.
KNIMEのデフォルトの箱ひげ図と比べると全然きれいですし,十分使えるレベルのきれいな図示ができています.

f:id:t_kahi:20190615094749p:plain

お手軽に箱ひげ図を描くなら「Conditional box plot」ノードで充分です.

「R view」ノードで箱ひげ図を作成する

本題です.結論は「ggplot2すごい」でした(何を今更…).
自分のようにggplot2??という方は,下記のサイトがめちゃめちゃわかりやすいので,参考にしてください.
ggplot2による可視化入門
ggplot2のチートシートも便利ですね…!
https://www.rstudio.com/wp-content/uploads/2016/10/ggplot2-cheatsheet-2.0-ja.pdf
文字の大きさ変えたいな,と思ったので下記も参考にしました.
ggplot2で論文用の図を作るときに使いたいオプション(点のshape、色、軸の文字の大きさ、色、エラーバー、背景) - Qiita

実際の「R view」ノードのスクリプトがこちらです.

#R view
library(ggplot2)
ggplot(knime.in, aes(x = A, y = y, color = A)) + #初期設定
  geom_boxplot() +  #boxplotを指定
  geom_jitter() +   #分布を重ねる
  labs(x = "group",
       y = "results") + #データのラベルを付ける
         theme(axis.text=element_text(size=12),
        axis.title=element_text(size=14,face="bold")) #データの文字サイズを変える

そして実行した結果がこちら.
f:id:t_kahi:20190615101630p:plain

すごい!きれいな箱ひげ図!
諸先輩方が「ggplot2はいいぞ」という理由がようやくわかった…

まとめ

  • とりあえずデータを可視化する or interactive重視⇒「Conditional box plot」
  • きれいにデータ可視化がしたい ⇒ 「R view」

という結論になりました.
自分も含めてCUIよりGUIのほうが向いていると使いやすいと感じているからKNIMEを使っていると思います.
全部をRやpythonで書くのは難しいですが,スポット的にプログラムを使うのは結構できるのではというのが,最近の印象です.