本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

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

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となるプロットを作成
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))
########

#補助線を追加:background_gridコマンド
#background_grid(主補助線:major = "xy" or "x" or "y" or "only_minor" or "none",
#                副補助線: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")

#異なるデータのプロットを重ね書き:ggdrawコマンド
#baseとなるプロットをggdrowコマンドで指定します
###重ね書きのデータを準備#####
boxes <- data.frame(
  x = sample((0:15)/20, 40, replace = TRUE),
  y = sample((0:20)/20, 40, replace = TRUE)
)
########
#重ね書き
ggdraw(PointPlot) + 
  geom_rect(data = boxes, aes(xmin = x, xmax = x + .15,
                              ymin = y, ymax = y + .15),
            colour = "gray60", fill = "#ffdd99")

####################################################
###ggdrawコマンドと組み合わせて利用するコマンド#####
####################################################
#グラフラベルの追加:draw_plot_labelコマンド
ggdraw(PointPlot) +
  draw_plot_label(label = "A", color = "#4b61ba")

#グラフ領域にテキストを追加:draw.textコマンド
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")

#プロット領域に自由にグラフを配置:draw_plotコマンド
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) 
########

#プロットを並べて表示:plot_gridコマンド
#例1 横にプロット:alignを適用しない
plot_grid(PointPlot, HistPlot, labels = c(1:2))
#例1 グラフサイズを揃えて横にプロット:alignを適用
plot_grid(PointPlot, HistPlot, labels = c(1:2), align = "h")
#例1 alignを適用しグラフの横幅を指定し全体のスケールを設定
#横幅を倍率で指定:rel_widths = c(数値, 数値)
#スケールを倍率で指定:scaleオプション
plot_grid(PointPlot, HistPlot, labels = c(1:2), align = "h", rel_widths = c(1, 1.5), scale = 0.95)

#例2 縦にプロット:alignを適用しない
plot_grid(PointPlot, HistPlot, labels = c(1:2), ncol = 1)
#例2 グラフサイズを揃えて縦にプロット:alignを適用
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

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.