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&#12398;&#12464;&#12521;&#12501;&#12402;&#12394;&#24418;#####
TestGPlot <- ggplot(TestData, aes(x = Group, y = Data1,
                                  color = Group, group = Group))
########

###&#22522;&#26412;&#12398;&#25955;&#24067;&#22259;#####
TestGPlot + geom_point()
########

#&#36600;&#12398;&#34920;&#31034;&#26368;&#22823;&#20516;&#12434;&#35373;&#23450;:axis0&#12467;&#12510;&#12531;&#12489;
#&#26368;&#22823;&#20516;&#12398;&#35373;&#23450;:max&#12458;&#12503;&#12471;&#12519;&#12531;
#&#20516;&#12398;&#24615;&#36074;&#12434;&#35373;&#23450;:continuous;&#36899;&#32154;&#22793;&#25968;,deiscrete:&#38626;&#25955;&#22793;&#25968;
#&#23550;&#31216;&#36600;:axis&#12458;&#12503;&#12471;&#12519;&#12531;
TestGPlot +
  geom_point() +
  axis0(max = 20, scale = "continuous", axis = "y")

#facet_wrap&#12467;&#12510;&#12531;&#12489;&#20351;&#29992;&#26178;&#12395;&#34892;&#26041;&#21521;&#12391;&#12503;&#12525;&#12483;&#12488;&#12434;&#37197;&#32622;:fill_by_column&#12467;&#12510;&#12531;&#12489;
#&#20998;&#21106;&#23550;&#35937;&#12487;&#12540;&#12479;&#12434;&#25351;&#23450;:fact&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12467;&#12510;&#12531;&#12489;&#12434;&#36969;&#29992;&#12375;&#12394;&#12356;&#22580;&#21512;
#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&#12388;&#12398;&#12503;&#12525;&#12483;&#12488;&#12434;&#20006;&#12409;&#12390;&#34920;&#31034;:ggalign&#12467;&#12510;&#12531;&#12489;
#Data1&#12392;Data2&#12398;&#25955;&#24067;&#22259;
PointPlot <- TestGPlot + geom_point(aes(x = Data1, y = Data2)) + labs(x = "Data1", y = "Data2")
#Group&#27598;&#12398;&#12487;&#12540;&#12479;&#31684;&#22258;
LinePlot <- TestGPlot + geom_line()
#&#34920;&#31034;
ggalign(plot1 = PointPlot, plot2 = LinePlot)

#2&#36600;&#12391;&#12503;&#12525;&#12483;&#12488;:ggdual_axis&#12467;&#12510;&#12531;&#12489;
#&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;
TestData2 <- as.data.frame(tapply(TestData$Group, TestData$Group, length))
TwoGGPlot <- ggplot(TestData2, aes(x = row.names(TestData2), y = TestData2[, 1]))
#&#26834;&#12464;&#12521;&#12501;
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")
#&#25240;&#12428;&#32218;&#12464;&#12521;&#12501;
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")
#&#12503;&#12525;&#12483;&#12488;
ggdual_axis(lhs = LinePlot, rhs = LinePlot2)

#ggplot&#12398;&#21021;&#26399;&#35373;&#23450;&#12398;&#33394;&#12391;&#12464;&#12521;&#12487;&#12540;&#12471;&#12519;&#12531;&#12434;&#21462;&#24471;:ggcolors&#12467;&#12510;&#12531;&#12489;
#&#12464;&#12521;&#12487;&#12540;&#12471;&#12519;&#12531;&#31684;&#22258;:n&#12458;&#12503;&#12471;&#12519;&#12531;
n <- 10
GGCols <- ggcolors(n)
plot(1:n, pch = 17, col = GGCols)

#&#31354;&#30333;&#12391;&#12521;&#12505;&#12523;&#12434;&#25913;&#34892;&#34920;&#31034;:label_breaks&#12467;&#12510;&#12531;&#12489;
#&#23550;&#35937;&#21015;&#12398;&#25351;&#23450;:split.col&#12458;&#12503;&#12471;&#12519;&#12531;
ggplot(label_breaks(TestData, split.col = 1), aes(x = Group, y = Data1)) +
  geom_point()

#&#12464;&#12522;&#12483;&#12489;&#32218;&#12398;&#35519;&#25972;:qgrid&#12467;&#12510;&#12531;&#12489;
#&#19968;&#25324;&#35519;&#25972;:x,y&#12458;&#12503;&#12471;&#12519;&#12531;;NULL&#12391;&#38750;&#34920;&#31034;
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")

#&#25351;&#23450;&#12375;&#12383;&#12487;&#12540;&#12479;&#12398;&#26368;&#22823;&#20516;+&#26368;&#22823;&#20516;*&#20418;&#25968;&#12398;&#20516;&#12434;&#31639;&#20986;:cushion&#12467;&#12510;&#12531;&#12489;
#&#12459;&#12486;&#12468;&#12522;&#12487;&#12540;&#12479;&#12398;&#22580;&#21512;&#12399;&#26368;&#38971;&#24230;&#25968;&#12364;&#26368;&#22823;&#20516;&#12392;&#12394;&#12426;&#12414;&#12377;
#&#12487;&#12540;&#12479;&#12398;&#25351;&#23450;:x&#12458;&#12503;&#12471;&#12519;&#12531;
#&#20418;&#25968;&#12398;&#25351;&#23450;:pad&#12458;&#12503;&#12471;&#12519;&#12531;
#&#12459;&#12486;&#12468;&#12522;&#12487;&#12540;&#12479;&#12398;&#22580;&#21512;
#&#38971;&#24230;&#12398;&#35336;&#31639;&#20363;
#tapply(TestData$Group, TestData$Group, length)
#Group1 Group2 Group3 Group4 Group5
#&#12288;&#12288;18     23     21     20     18
#cushion&#12467;&#12510;&#12531;&#12489;,&#32080;&#26524;&#12399;"23 + 23*pad"&#12391;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をコピーしました