ggplot2でプロット
ggplot2
- Rにはggplot2というパッケージがあります。
- なんか綺麗にプロットするのに使えて,みんな使っているらしいですよ。
- ただし,初心者にはなんじゃこれ?って感じのオプションだらけで,私もなんじゃこれ?ってなっています。
- 細かいことは省いて,とりあえず図を出力したい,という方向けにサンプルコードを置いておきますので,各自修正してお使いください。
データの読み込み
- 例によって例のやつです。ファイルを持っていない方はRの基礎3あたりを参照してDLしてください。
library(openxlsx)
data <- read.xlsx("pone.0226832.s001.xlsx")
ggplot用にデータを変換する
本当に面倒なのですが,ggplotはすべてのデータを縦(行方向)に入力しなければなりません。- 心理学のデータ的に言うと,被験者内要因のデータであっても,被験者間要因のような形で入力しなければならないということです。
- なので,reshape2というライブラリを用いてデータを変換します。
- インストールしていない方はインストールしてください。
# data[,1:3]だけ使います。
# そこの3列を1列に変換します。変換した先の列の名前をvariableとします。
library(reshape2)
ggdata <- reshape2::melt(data[,1:3],
variable.name="variable", value.name="value")
プロットする
棒グラフ + 個人プロット
- 何も考えず,以下をコピペしましょう
- ggplotのコード(設定)は,いろんな要素を+でどんどん追加していく,という感じ
- だけど,まあわかりにくい。表記も色々あってわかりにくい。100歩譲ってわかりにくい。
- 多分下のコードも,もっとすっきり書けるはず,だけど実用上問題なければよいのです。
- Windowsだとおそらく警告が沢山でますが,フォントの問題です。無視です。
- geom = "bar":棒グラフをプロットしろ
library(ggplot2)
ggplot(ggdata, aes(y = value, x = variable, fill = variable, colour = variable, group = variable)) +
stat_summary(fun.y = "mean", geom = "bar", width = 0.8, position = position_dodge(width = .8), fill="grey") +
stat_summary(fun.y = "mean", fun.ymin = function(x)mean(x)-sd(x), fun.ymax = function(x)mean(x) + sd(x), geom = "pointrange",
position = position_dodge(width = .6) ) +
geom_point(position = position_jitterdodge(dodge.width = .6, jitter.width = 0.6, jitter.height = 0)) +
theme_light() + labs(x = "Exp condition", y = "Task performance") +
theme(axis.title.x = element_text(size=16, family = "Arial"),
axis.title.y = element_text(size=16, family = "Arial"),
axis.text.x = element_text(size=12, colour = 1, family = "Arial"),
axis.text.y = element_text(size = 12, colour = 1, family = "Arial")) +
scale_y_continuous(expand = c(0, 0), limits = c(0,22))
箱ひげ図
ggplot(ggdata, aes(x = variable, y = value, colour=variable, fill=variable)) +
geom_boxplot(alpha = 0.8) +
labs(x = "Exp condition", y = "Task performance") +
theme_classic() +
theme(axis.title.x = element_text(size=16, family = "Arial"),
axis.title.y = element_text(size=16, family = "Arial"),
axis.text.x = element_text(size=12, colour = 1, family = "Arial"),
axis.text.y = element_text(size = 12, colour = 1, family = "Arial")) +
scale_y_continuous(expand = c(0, 0), limits = c(0,22))
バイオリンプロット
ggplot(ggdata, aes(x = variable, y = value,colour=variable,fill=variable)) +
geom_violin(alpha = 0.4) +
labs(x = "Exp condition", y = "Task performance") +
theme_classic() +
theme(axis.title.x = element_text(size=16, family = "Arial"),
axis.title.y = element_text(size=16, family = "Arial"),
axis.text.x = element_text(size=12, colour = 1, family = "Arial"),
axis.text.y = element_text(size = 12, colour = 1, family = "Arial")) +
scale_y_continuous(expand = c(0, 0), limits = c(0,22))