この記事では、R 
ggpubr 、 
cowplot、および
gridExtraパッケージで利用可能なヘルパー関数を使用して、1つ以上の図にいくつかの
ggplotグラフを組み合わせる方法を順を追って説明し
ます 。 また、結果のグラフをファイルにエクスポートする方法についても説明します。
前編第二部ミックステーブル、テキスト、ggplot2-graphics
このセクションでは、表とテキストをグラフとともに表示する方法を示します。 アイリスデータセットを使用します。
これらのチャートを作成することから始めましょう:
- Sepal.Length可変密度グラフ。 R関数: 
ggdensity() [in ggpubr ] - 記述統計(平均、標準偏差など)を含むピボットテーブル
- 記述統計を計算するためのR関数: 
desc_statby() [in ggpubr ] - テキスト付きのテーブルを作成するR関数: 
ggtexttable() [in ggpubr ] 
 - テキストの段落 。 R関数: 
ggparagraph() [ ggpubr内 ] 
ggarrange() 、3つのグラフすべてを[ 
ggpubrの ] 
ggarrange()関数と
組み合わせます。
 #   "Sepal.Length" #:::::::::::::::::::::::::::::::::::::: density.p <- ggdensity(iris, x = "Sepal.Length", fill = "Species", palette = "jco") #    Sepal.Length #:::::::::::::::::::::::::::::::::::::: #      stable <- desc_statby(iris, measure.var = "Sepal.Length", grps = "Species") stable <- stable[, c("Species", "length", "mean", "sd")] #    ,  "medium orange" ( ) stable.p <- ggtexttable(stable, rows = NULL, theme = ttheme("mOrange")) #   #:::::::::::::::::::::::::::::::::::::: text <- paste("iris data set gives the measurements in cm", "of the variables sepal length and width", "and petal length and width, respectively,", "for 50 flowers from each of 3 species of iris.", "The species are Iris setosa, versicolor, and virginica.", sep = " ") text.p <- ggparagraph(text = text, face = "italic", size = 11, color = "black") #     ggarrange(density.p, stable.p, text.p, ncol = 1, nrow = 3, heights = c(1, 0.5, 0.3)) 

グラフィックエレメントをggplotに追加する
テーブル、グラフ、またはその他のテーブルベースの要素をggplotワークスペースに追加するには、 
annotation_custom()関数[ 
ggplot2内 ]があります。 簡略化された形式:
 annotation_custom(grob, xmin, xmax, ymin, ymax) 
- grob :表示用の外部グラフィック要素
 - xmin 、 xmax :座標のx位置(水平位置)
 - ymin 、 ymax :座標のy位置(垂直位置)
 
テーブルをggplotに配置します
前のセクションで作成したdensity.pおよびstable.pグラフを使用します。
 density.p + annotation_custom(ggplotGrob(stable.p), xmin = 5.5, ymin = 0.7, xmax = 8) 

散布図をggplotに入れます
- irisデータセットから、y =“ Sepal.Width” x x =“ Sepal.Length”の散布図を作成します。 R関数: 
ggscatter() [ ggpubr ]。 - 背景が透明なx変数とy変数の個別の散布図を作成します。 R関数: 
ggboxplot() [ ggpubr ]。 - 散布図をグリッド用語で「グロブ」と呼ばれるグラフィックに変換します。 R関数: 
ggplotGrob() [ ggplot2 ]。 - 散布図のグローブを散布図内に配置します。 R関数: 
annotation_custom() [ ggplot2 ]。 
内部に配置された散布図は複数のポイントで重ねられているため、透明な背景が使用されます。
 #     ("Species") #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: sp <- ggscatter(iris, x = "Sepal.Length", y = "Sepal.Width", color = "Species", palette = "jco", size = 3, alpha = 0.6) #    x/y #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #    x xbp <- ggboxplot(iris$Sepal.Length, width = 0.3, fill = "lightgray") + rotate() + theme_transparent() #     ybp <- ggboxplot(iris$Sepal.Width, width = 0.3, fill = "lightgray") + theme_transparent() #     #   “grob”   Grid xbp_grob <- ggplotGrob(xbp) ybp_grob <- ggplotGrob(ybp) #       #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: xmin <- min(iris$Sepal.Length); xmax <- max(iris$Sepal.Length) ymin <- min(iris$Sepal.Width); ymax <- max(iris$Sepal.Width) yoffset <- (1/15)*ymax; xoffset <- (1/15)*xmax #  xbp_grob    sp + annotation_custom(grob = xbp_grob, xmin = xmin, xmax = xmax, ymin = ymin-yoffset, ymax = ymin+yoffset) + #  ybp_grob    annotation_custom(grob = ybp_grob, xmin = xmin-xoffset, xmax = xmin+xoffset, ymin = ymin, ymax = ymax) 

背景画像をggplot2グラフィックスに追加します
背景画像をインポートします。 背景画像の形式に応じて、 
readPNG()関数[ 
jpegパッケージ]または
readPNG()関数[ 
pngパッケージ]のいずれかを使用します。
以下の例をテストするには、 
pngパッケージがインストールされていることを確認してください。 
install.packages(“png”)コマンドを使用してインストールできます。
 #   img.file <- system.file(file.path("images", "background-image.png"), package = "ggpubr") img <- png::readPNG(img.file) 
ggplotを背景画像と組み合わせます。 R関数: 
background_image() [ 
ggpubr内 ]。
 library(ggplot2) library(ggpubr) ggplot(iris, aes(Species, Sepal.Length))+ background_image(img)+ geom_boxplot(aes(fill = Species), color = "white")+ fill_palette("jco") 

引数alphaを指定して、散布図の塗りつぶしの透明度を変更します。 値は[0、1]の範囲である必要があります。0は完全な透明度で、1は透明度の欠如です。
 library(ggplot2) library(ggpubr) ggplot(iris, aes(Species, Sepal.Length))+ background_image(img)+ geom_boxplot(aes(fill = Species), color = "white", alpha = 0.5)+ fill_palette("jco") 

別の例、ggplot2にフランスの地図を重ねる:
 mypngfile <- download.file("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/France_Flag_Map.svg/612px-France_Flag_Map.svg.png", destfile = "france.png", mode = 'wb') img <- png::readPNG('france.png') ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + background_image(img)+ geom_point(aes(color = Species), alpha = 0.6, size = 5)+ color_palette("jco")+ theme(legend.position = "top") 

複数のページにグラフィックを配置します
ggplotsの長いリスト(n = 20など)がある場合は、それらを複数のページに配置して整理することをお勧めします。 1ページに4つのグラフィックスがある場合、20ページには5ページが必要です。
[ 
ggpubr ]の
ggarrange()関数は、複数のページに複数のggplotを配置するための便利なソリューションを提供します。 nrow引数とncol引数を指定した後、 
ggarrange()関数は、すべてのグラフに適合するために必要なページ数を自動的に計算します。 順序付けられたggplotのリストを返します。
たとえば、次のコード
 multi.page <- ggarrange(bxp, dp, bp, sp, nrow = 1, ncol = 2) 
それぞれに2つのグラフがある2つのページを返します。 次のように各ページを表示できます。
 multi.page[[1]] #   1 multi.page[[2]] #   2 
順序付きチャートは、 
ggexport()関数[ 
ggpubr内 ]を使用してPDFファイルにエクスポートできます。
 ggexport(multi.page, filename = "multi.page.ggplot2.pdf") 
PDFファイルマルチページ出力は、 
marrangeGrob marrangeGrob()関数[ 
gridExtra ]でも取得できます。
 library(gridExtra) res <- marrangeGrob(list(bxp, dp, bp, sp), nrow = 1, ncol = 2) #   pdf- ggexport(res, filename = "multi.page.ggplot2.pdf") #   res 
ggarrangeとのネストされた関係()
前のセクションで作成したチャートを配置します。
 p1 <- ggarrange(sp, bp + font("x.text", size = 9), ncol = 1, nrow = 2) p2 <- ggarrange(density.p, stable.p, text.p, ncol = 1, nrow = 3, heights = c(1, 0.5, 0.3)) ggarrange(p1, p2, ncol = 2, nrow = 1) 

チャートのエクスポート
R関数: 
ggexport() [ 
ggpubr内 ]。
最初に、虹彩データセットの変数Sepal.Length、Sepal.Width、Petal.LengthおよびPetal.Widthに対応する4つのggplotのリストを作成します。
 plots <- ggboxplot(iris, x = "Species", y = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"), color = "Species", palette = "jco" ) plots[[1]] #    plots[[2]] #     .. 
その後、個々のグラフィックをファイル(pdf、eps、またはpng)にエクスポートできます(ページごとに1つのグラフィック)。 エクスポート時にグラフを配置できます(1ページに2つ)。
PDFでの個々のグラフのエクスポート(ページごとに1つ):
 ggexport(plotlist = plots, filename = "test.pdf") 
並べ替えてエクスポートします。 同じページに複数のグラフを表示するには、nrowとncolを設定します。
 ggexport(plotlist = plots, filename = "test.pdf", nrow = 2, ncol = 1)