「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コマンド
少しでも、あなたの解析が楽になりますように!!