Rで解析:ggplot2の体裁を整える!「cowplot」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

ggplot2の複雑な装飾が簡単に適応できるパッケージの紹介です。ウォーターマークや軸表示位置、異なるデータのグラフを重ね書き、高さや横幅が異なるグラフを同じサイズで並べてプロットすることが可能です。ggplot2で異なるグラフの軸を合わせてプロットするのは手間です。本パッケージはそんな手間や体裁に関わるコマンドが収録されています。体裁でお困りの方は利用してみてはいかがでしょうか。

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

スポンサーリンク

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

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

#パッケージのインストール
install.packages("cowplot")

実行コマンドの紹介

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

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 30
SampleData <- tibble(Name = rep(paste0("Test", 1:10), each = 100),
                     Data1 = sample(1000:2000, 1000, replace = TRUE),
                     Data2 = sample(1000:2000, 1000, replace = TRUE),
                     ColData = rep(c("#d9bb9c", "#807765", "#4b61ba", "#90736a",
                                     "#ffdd99","#deb7a0", "#28231e", "#a87963",
                                     "#ffdd99", "#756c6d"), each = 100))
#base&#12392;&#12394;&#12427;&#12503;&#12525;&#12483;&#12488;&#12434;&#20316;&#25104;
PointPlot <- ggplot(SampleData, aes(x = Data1, y = Data2,
                                    colour = ColData, label = Name)) +
  geom_point(size = 4) + labs(title = "TEST PointPlot")
HistPlot <- ggplot(SampleData, aes(x = Data2, colour = ColData)) +
  geom_histogram() + labs(title = "TEST HistPlot") +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))
########

#&#35036;&#21161;&#32218;&#12434;&#36861;&#21152;:background_grid&#12467;&#12510;&#12531;&#12489;
#background_grid(&#20027;&#35036;&#21161;&#32218;:major = "xy" or "x" or "y" or "only_minor" or "none",
#                &#21103;&#35036;&#21161;&#32218;:minor = "xy" or "x" or "y" or "none")
ggplot(SampleData, aes(x = Data1, y = Data2, colour = ColData)) +
  geom_point(size = 4) + labs(title = "TEST") +
  background_grid(major = "xy", minor = "x", size.major = 2, size.minor = 3,
                  colour.major = "#ffdd99", colour.minor = "#62513d")

#&#30064;&#12394;&#12427;&#12487;&#12540;&#12479;&#12398;&#12503;&#12525;&#12483;&#12488;&#12434;&#37325;&#12397;&#26360;&#12365;:ggdraw&#12467;&#12510;&#12531;&#12489;
#base&#12392;&#12394;&#12427;&#12503;&#12525;&#12483;&#12488;&#12434;ggdrow&#12467;&#12510;&#12531;&#12489;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;
###&#37325;&#12397;&#26360;&#12365;&#12398;&#12487;&#12540;&#12479;&#12434;&#28310;&#20633;#####
boxes <- data.frame(
  x = sample((0:15)/20, 40, replace = TRUE),
  y = sample((0:20)/20, 40, replace = TRUE)
)
########
#&#37325;&#12397;&#26360;&#12365;
ggdraw(PointPlot) + 
  geom_rect(data = boxes, aes(xmin = x, xmax = x + .15,
                              ymin = y, ymax = y + .15),
            colour = "gray60", fill = "#ffdd99")

####################################################
###ggdraw&#12467;&#12510;&#12531;&#12489;&#12392;&#32068;&#12415;&#21512;&#12431;&#12379;&#12390;&#21033;&#29992;&#12377;&#12427;&#12467;&#12510;&#12531;&#12489;#####
####################################################
#&#12464;&#12521;&#12501;&#12521;&#12505;&#12523;&#12398;&#36861;&#21152;:draw_plot_label&#12467;&#12510;&#12531;&#12489;
ggdraw(PointPlot) +
  draw_plot_label(label = "A", color = "#4b61ba")

#&#12464;&#12521;&#12501;&#38936;&#22495;&#12395;&#12486;&#12461;&#12473;&#12488;&#12434;&#36861;&#21152;:draw.text&#12467;&#12510;&#12531;&#12489;
ggdraw(PointPlot) +
  draw_text("karadani", x = 0.4, y = 0.8, size = 90, alpha = 0.5, col = "blue") +
  draw_text("Emono", angle = 30, size = 200, alpha = 0.7, col = "#a87963")

#&#12503;&#12525;&#12483;&#12488;&#38936;&#22495;&#12395;&#33258;&#30001;&#12395;&#12464;&#12521;&#12501;&#12434;&#37197;&#32622;:draw_plot&#12467;&#12510;&#12531;&#12489;
ggdraw() +
  draw_plot(PointPlot, x = -0.05, y = 0.7, width = 1, height = 0.55) +
  draw_plot(HistPlot, x = 0.3, y = 0.01, width = 0.5, height = 0.55) +
  draw_plot(PointPlot, x = -0.05, y = -0.01, width = 0.5, height = 0.25) +
  draw_plot(HistPlot, x = 0.5, y = 0.5, width = 0.5, height = 0.3) 
########

#&#12503;&#12525;&#12483;&#12488;&#12434;&#20006;&#12409;&#12390;&#34920;&#31034;:plot_grid&#12467;&#12510;&#12531;&#12489;
#&#20363;1 &#27178;&#12395;&#12503;&#12525;&#12483;&#12488;:align&#12434;&#36969;&#29992;&#12375;&#12394;&#12356;
plot_grid(PointPlot, HistPlot, labels = c(1:2))
#&#20363;1 &#12464;&#12521;&#12501;&#12469;&#12452;&#12474;&#12434;&#25539;&#12360;&#12390;&#27178;&#12395;&#12503;&#12525;&#12483;&#12488;:align&#12434;&#36969;&#29992;
plot_grid(PointPlot, HistPlot, labels = c(1:2), align = "h")
#&#20363;1 align&#12434;&#36969;&#29992;&#12375;&#12464;&#12521;&#12501;&#12398;&#27178;&#24133;&#12434;&#25351;&#23450;&#12375;&#20840;&#20307;&#12398;&#12473;&#12465;&#12540;&#12523;&#12434;&#35373;&#23450;
#&#27178;&#24133;&#12434;&#20493;&#29575;&#12391;&#25351;&#23450;:rel_widths = c(&#25968;&#20516;, &#25968;&#20516;)
#&#12473;&#12465;&#12540;&#12523;&#12434;&#20493;&#29575;&#12391;&#25351;&#23450;:scale&#12458;&#12503;&#12471;&#12519;&#12531;
plot_grid(PointPlot, HistPlot, labels = c(1:2), align = "h", rel_widths = c(1, 1.5), scale = 0.95)

#&#20363;2 &#32294;&#12395;&#12503;&#12525;&#12483;&#12488;:align&#12434;&#36969;&#29992;&#12375;&#12394;&#12356;
plot_grid(PointPlot, HistPlot, labels = c(1:2), ncol = 1)
#&#20363;2 &#12464;&#12521;&#12501;&#12469;&#12452;&#12474;&#12434;&#25539;&#12360;&#12390;&#32294;&#12395;&#12503;&#12525;&#12483;&#12488;:align&#12434;&#36969;&#29992;
plot_grid(PointPlot, HistPlot, labels = c(1:2), ncol = 1, align = "v")

出力例

・background_gridコマンド

background_grid

・ggdrawコマンド

ggdraw

・draw_plot_labelコマンド

draw_plot_label

・draw.textコマンド

draw.text

・draw_plotコマンド

draw_plot

・plot_gridコマンド

plot_grid

少しでも、あなたのウェブや実験の解析が楽になりますように!!

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