ggplot2:複数のチャートを1つに簡単に結合する方法、パート3

この記事では、R ggpubrcowplot、およびgridExtraパッケージで利用可能なヘルパー関数を使用して、1つ以上の図にいくつかのggplotグラフを組み合わせる方法を順を追って説明します 。 また、結果のグラフをファイルにエクスポートする方法についても説明します。
前編
第二部

ミックステーブル、テキスト、ggplot2-graphics


このセクションでは、表とテキストをグラフとともに表示する方法を示します。 アイリスデータセットを使用します。

これらのチャートを作成することから始めましょう:

  1. Sepal.Length可変密度グラフ。 R関数: ggdensity() [in ggpubr ]
  2. 記述統計(平均、標準偏差など)を含むピボットテーブル
    • 記述統計を計算するためのR関数: desc_statby() [in ggpubr ]
    • テキスト付きのテーブルを作成するR関数: ggtexttable() [in ggpubr ]
  3. テキストの段落 。 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) 


テーブルをggplotに配置します


前のセクションで作成したdensity.pおよびstable.pグラフを使用します。

 density.p + annotation_custom(ggplotGrob(stable.p), xmin = 5.5, ymin = 0.7, xmax = 8) 


散布図をggplotに入れます


  1. irisデータセットから、y =“ Sepal.Width” x x =“ Sepal.Length”の散布図を作成します。 R関数: ggscatter() [ ggpubr ]。
  2. 背景が透明なx変数とy変数の個別の散布図を作成します。 R関数: ggboxplot() [ ggpubr ]。
  3. 散布図をグリッド用語で「グロブ」と呼ばれるグラフィックに変換します。 R関数: ggplotGrob() [ ggplot2 ]。
  4. 散布図のグローブを散布図内に配置します。 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() #     #   “grobGrid 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) 

Source: https://habr.com/ru/post/J339090/


All Articles