Rで解析:ggplot2の作業効率が向上!!「plotflow」パッケージ

Rの解析に役に立つ記事

ggplot2パッケージは図を作成するのに非常に強力なパッケージですが、コマンドが多く慣れないと装飾などの作業に時間がかかります。そんな問題を解決するパッケージの紹介です。

本パッケージではプロットの軸スケール、facet_wrapコマンド使用時に行方向でプロットを配置、2つのプロットを並べて表示、2軸でプロット、グラフ補助線の色調整などを簡単に設定することができます。

なお、実行コマンドで紹介していないコマンド利用時にGhostscriptのエラーが出る場合があります。その場合はリンク先よりGhostscriptをダウンロードしてインストールしてください。

・Ghostscript Downloads
 http://ghostscript.com/download/gsdnld.html

参考:手軽で綺麗なグラフが欲しいなら、ggplot2のまとめです。
https://www.karada-good.net/analyticsr/r-78/

パッケージバージョンは0.2.1。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("devtools")
devtools::install_github("trinker/plotflow")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("plotflow")

###データ例の作成#####
n <- 100
TestData <- data.frame(Group = sample(paste0("Group ", 1:5), n, replace = TRUE),
                       Data1 = sample(0:26, n, replace = TRUE),
                       Data2 = rnorm(n))
########

###ggplot2のグラフひな形#####
TestGPlot <- ggplot(TestData, aes(x = Group, y = Data1,
                                  color = Group, group = Group))
########

###基本の散布図#####
TestGPlot + geom_point()
########

#軸の表示最大値を設定:axis0コマンド
#最大値の設定:maxオプション
#値の性質を設定:continuous;連続変数,deiscrete:離散変数
#対称軸:axisオプション
TestGPlot +
  geom_point() +
  axis0(max = 20, scale = "continuous", axis = "y")

#facet_wrapコマンド使用時に行方向でプロットを配置:fill_by_columnコマンド
#分割対象データを指定:factオプション
#コマンドを適用しない場合
#TestGPlot + geom_point() + facet_wrap(~Group, ncol = 2) + coord_flip()
ggplot(fill_by_column(TestData, fact = "Group"),
       aes(x = Group, y = Data1, color = Group)) +
  geom_point() + facet_wrap(~Group, ncol = 2) +
  coord_flip()

#2つのプロットを並べて表示:ggalignコマンド
#Data1とData2の散布図
PointPlot <- TestGPlot + geom_point(aes(x = Data1, y = Data2)) + labs(x = "Data1", y = "Data2")
#Group毎のデータ範囲
LinePlot <- TestGPlot + geom_line()
#表示
ggalign(plot1 = PointPlot, plot2 = LinePlot)

#2軸でプロット:ggdual_axisコマンド
#データの作成
TestData2 <- as.data.frame(tapply(TestData$Group, TestData$Group, length))
TwoGGPlot <- ggplot(TestData2, aes(x = row.names(TestData2), y = TestData2[, 1]))
#棒グラフ
LinePlot <- TwoGGPlot + geom_bar(stat = "identity", fill = "#a87963") + theme_bw() +
  theme(plot.margin = grid::unit(c(.5, 1, .5, 0), "cm")) +
  labs(x = "Group", y = "Data")
#折れ線グラフ
LinePlot2 <- TwoGGPlot + geom_line(group = 1, color = "#4b61ba", size = 2) + theme_bw() +
  theme(plot.margin = grid::unit(c(.5, 1, .5, 0), "cm")) + ylim(0, 30) +
  labs(x = "Group", y = "Data2")
#プロット
ggdual_axis(lhs = LinePlot, rhs = LinePlot2)

#ggplotの初期設定の色でグラデーションを取得:ggcolorsコマンド
#グラデーション範囲:nオプション
n <- 10
GGCols <- ggcolors(n)
plot(1:n, pch = 17, col = GGCols)

#空白でラベルを改行表示:label_breaksコマンド
#対象列の指定:split.colオプション
ggplot(label_breaks(TestData, split.col = 1), aes(x = Group, y = Data1)) +
  geom_point()

#グリッド線の調整:qgridコマンド
#一括調整:x,yオプション;NULLで非表示
TestGPlot +
  geom_point(aes(x = Data1, y = Data2)) + labs(x = "Data1", y = "Data2") +
  qgrid(#x = NULL, y = NULL,
    xmaj = "green", xmin = "blue", ymaj = "yellow", ymin = "red")

#指定したデータの最大値+最大値*係数の値を算出:cushionコマンド
#カテゴリデータの場合は最頻度数が最大値となります
#データの指定:xオプション
#係数の指定:padオプション
#カテゴリデータの場合
#頻度の計算例
#tapply(TestData$Group, TestData$Group, length)
#Group1 Group2 Group3 Group4 Group5
#  18     23     21     20     18
#cushionコマンド,結果は"23 + 23*pad"で46
cushion(TestData$Group, pad = 1)
[1] 46

出力例

・基本の散布図

basescatter

・axis0コマンド

axis0

・fill_by_columnコマンド

fill_by_column

・ggalignコマンド

ggalign

・ggdual_axisコマンド

ggdual_axis

・ggcolorsコマンド

ggcolors

・ggplot_colコマンド

ggplot_col

・label_breaksコマンド

label_breaks

・qgridコマンド

qgrid

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました