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

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

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

「ggplot2」パッケージの「facet_wrap」や「facet_grid」コマンドを使いやすくするだけでなく、軸や凡例の体裁を色々整えることが可能なパッケージの紹介です。「ggplot2」パッケージ単独でも体裁を整えることが可能ですが、本パッケージを利用することで大幅な作業時間を短縮できると考えます。

パッケージバージョンは0.2.3。windows11のR version 4.2.2で確認しています。

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

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

#パッケージのインストール
install.packages("ggh4x")
スポンサーリンク

実行コマンドの紹介

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

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}

set.seed(1234)
n <- 50
TestData <- tibble(Group = sample(paste0("Group ", 1:2), n, replace = TRUE),
                   SubGroup = sample(paste0("SubGroup ", 1:3), n, replace = TRUE),
                   Data_X = 1:n,
                   Data_Y = rnorm(n))
########

###基準プロットの作成#####
TestPlot <- ggplot(TestData, aes(x = Data_X, y = Data_Y, color = Group)) +
  geom_point() +
  theme(axis.line = element_line(colour = "black"))
#####

#ggplot::facet_wrapの拡張:facet_wrap2コマンド
#facetsの条件を指定:facetsオプション;varsコマンドを使用して設定
#並べる行数,列数を設定:nrow,ncolオプション
#軸の固定方法:scalesオプション;"fixed","free_x","free_y","free"
#軸の表示設定:axesオプション;"margins","x","y","all"
#軸ラベルの表示設定:remove_labelsオプション;"none","x","y","all"
#axesオプションの軸に適応されます
#プロット方向:dirオプション;"h","v"
TestPlot +
  facet_wrap2(facets = vars(Group), nrow = NULL, ncol = NULL,
              scales = "free", axes = "margins",
              remove_labels = "none",
              shrink = TRUE, dir = "v")

#ggplot::facet_gridの拡張:facet_grid2コマンド
#オプションの多くはfacet_wrap2コマンドと共通
#列方向の分割指標:rowsオプション;varsコマンドを使用して設定
#行方向の分割指標:colsオプション;varsコマンドを使用して設定
TestPlot +
  facet_grid2(rows = vars(Group), cols = vars(SubGroup),
              scales = "fixed", space = "fixed",
              axes = "margins", remove_labels = "none")

#入れ子のfacetプロット:facet_nestedコマンド
#ラベルの位置を指定:switchオプション;"x","y","both"
TestPlot +
  facet_nested(~ Group + SubGroup, 
               nest_line = element_line(linetype = 2,
                                        colour = "blue"),
               switch = "y")

#レイアウトを指定してプロット:facet_manualコマンド
#レイアウトをmatrixで指定する
design <- matrix(c(1,2,1,2), 2, 2)
#プロット
TestPlot +
  facet_manual(vars(Group), design = design)

#こんな使い方も出来ます
#レイアウトを文字と#(空白)で指定する
#改行で行を切り替える
design <- "
A#
#B
"
#プロット
TestPlot +
  facet_manual(vars(Group), design = design,
               heights = unit(c(4, 3), "cm"),
               widths = unit(c(6, 3), "cm"))

#各コマンドのstripオプションに体裁を適応する:strip_themedコマンド
TestStrip <- strip_themed(
  #水平方向の体裁
  #listで各ラベルの色を設定可能:fill,color
  background_x = 
    list(element_rect(fill = "dodgerblue"),
         element_rect(fill = "green"),
         element_rect(fill = "white")),
  text_x = elem_list_text(colour = "black",
                          face = "bold"),
  #by_layer_xオプション:FALSE:異なる要素を個々に適応
  by_layer_x = FALSE,
  #垂直方向の体裁
  background_y = elem_list_rect(
    fill = c("gold", "red")
  ),
  text_y = elem_list_text(angle = c(0, 45)),
  #by_layer_yオプション:FALSE:異なる要素を個々に適応
  by_layer_y = TRUE
)

#プロット
TestPlot +
  facet_grid2(rows = vars(Group), cols = vars(SubGroup),
              scales = "fixed", space = "fixed",
              axes = "margins", remove_labels = "none",
              strip = TestStrip)

#facet_gridの各パネルサイズを調整:force_panelsizesコマンド
#列方向のサイズ:colsオプション
#行方向のサイズ:rowsオプション
#行列の比率を連動:respectオプション;TRUE/FALSE
TestPlot +
  facet_grid(Group ~ SubGroup) +
  force_panelsizes(cols = c(1, 0.5, 0.8), 
                   rows = c(1, 3),
                   respect = FALSE)

###facet_grid後の各グループへ色を設定する:scale_colour_multiコマンド#####
#データの作成:SubGroup毎にデータを適応する
TestPlot <- ggplot(TestData, aes(x = Data_X, y = Data_Y, color = Group)) +
  geom_point(aes(SG1 = Data_X),
             data = ~ subset(., SubGroup == "SubGroup 1")) +
  geom_point(aes(SG2 = Data_X),
             data = ~ subset(., SubGroup == "SubGroup 2")) +
  geom_point(aes(SG3 = Data_X),
             data = ~ subset(., SubGroup == "SubGroup 3"))

#scale_colour_multiコマンド
#適応するデータ名を指定:aestheticsオプション
TestPlot +
  facet_wrap(~ SubGroup, scales = "free_x")+
  scale_colour_multi(
    aesthetics = c("SG1", "SG2", "SG3"),
    colours = list(c("black", "green"),
                   c("white", "blue"),
                   c("red", "blue")),
    guide = list(guide_colourbar(barheight = unit(35, "pt")))
  )

#凡例を文字の色で表示する:scale_colour_brewer/scale_fill_brewerコマンド
#guidesコマンドに適応するguide_stringlegendコマンドもあります
TestPlot +
  scale_colour_brewer(palette = "Dark2",
                      guide = "stringlegend")

###scale_x/y_continuousコマンドに適応して軸の体裁を整える#####
TestPlot +
  scale_x_continuous(
    #軸の書式を指定:guide_axisコマンド
    #sec.axisオプションと同時使用は不可
    #位置:positionオプション;"top","bottom","left","right"
    #ラベルの行/列数を指定:n.dodgeオプション
    #guide = guide_axis(position = "top", angle = 90,
    #                   n.dodge = 3),

    #第2軸を指定:dup_axisコマンド
    sec.axis = dup_axis(breaks = seq(from = 8, to = 45, by = 5),
                        guide = guide_axis(angle = 45)),

    #軸の色を設定:guide_axis_colorコマンド
    #「guides」コマンドの設定するguide_axis_truncatedコマンドもあります
    #軸の描写範囲を指定:trunc_lower/trunc_upperオプション
    guide = guide_axis_color(color = "red",
                             trunc_lower = unit(c(0.1, 0.3), "npc"),
                             trunc_upper = unit(c(0.2, 0.8), "npc"))
  ) 
########

出力例

・facet_wrap2コマンド

・facet_grid2コマンド

・facet_nestedコマンド

・facet_manualコマンド

・strip_themedコマンド

・force_panelsizesコマンド

・scale_colour_multiコマンド

・guide_axisコマンド

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

スポンサーリンク
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.