Rで解析:ggplot2に情報を追加!!「ggpp」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

ggplot2にプロットやテキストなどの情報を追加するのに便利なパッケージの紹介です。多くのコマンドが収録されています。コマンド例ではプロットにテキスト、テーブル、基準線、プロット、centroid、基準で四分割し出現数のコマンドを紹介します。

パッケージバージョンは0.4.4。windows 11のR version 4.1.3で確認しています。

スポンサーリンク

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

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

#パッケージのインストール
install.packages("ggpp")

実行コマンド

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

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

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

###データ例の作成#####
set.seed(1234)
n <- 50
TestData <- tibble(Group = factor(sample(paste0("Group", 1:4), n,
                                         replace = TRUE)),
                   X_Data = sample(c(1:50), n, replace = TRUE),
                   Y_Data = sample(c(51:100), n, replace = TRUE))
########


###基本の散布図を作成#####
PointPlot <- ggplot(TestData, aes(x = X_Data, y = Y_Data,
                                  col = Group)) +
  geom_point() +
  scale_color_manual(values = c("red", "#505457",
                                "#4b61ba", "#a87963")) +
  theme_bw()

#確認
PointPlot
########


#プロットにテキストを追加:geom_text_npcコマンド
##普通にgeom_text_npcコマンド
##プロット位置はdata.frame形式で指定します##
#X軸位置;"left","right","center"
#Y軸位置;"bottom","top","middle"
TexiPoint <- tibble(X_Position = c("left", "left", "right", "right", "center"),
                    Y_Position = c("bottom", "top", "bottom", "top", "middle"),
                    text = c("からだに", "いいもの", "KARADA", "GOOD", ".net"))
#プロットに設定
PointPlot + geom_text_npc(data = TexiPoint,
                          aes(npcx = X_Position,
                              npcy = Y_Position,
                              label = text),
                          col = c("red", "blue", "yellow", "green", "black"),
                          size = c(3, 5, 7, 9, 11))

##例えばgeom_text_npcコマンドでfacet_wrapを適応
#ポイントはfacet_wrapのグループ変数を変数名にする
FacetPoint <- tibble(Group = levels(TestData$Group),
                     X_Position = "left",
                     Y_Position = "top",
                     text = c("からだに", "いいもの", "KARADA", "GOOD"))
#プロットに設定
PointPlot + geom_text_npc(data = FacetPoint,
                          aes(npcx = X_Position,
                              npcy = Y_Position,
                              label = text),
                          col = c("red", "blue", "yellow", "green"),
                          size =c(3, 5, 7, 9)) +
  facet_wrap(~Group, scales = "free")
#############


#プロットにテーブルを追加する:geom_tableコマンド
#追加するデータを準備
InsertTable <- tibble(X = 0, Y = 120) %>%
  mutate(Table = TestData %>%
           group_by(Group) %>%
           summarise(X_Data = mean(X_Data), Y_Data = mean(Y_Data)) %>%
           list())
#確認
InsertTable
# A tibble: 1 x 3
#     X     Y Table           
#  <dbl> <dbl> <list>          
#1    0    120 <tibble [4 x 3]>  

#プロットに設定
#デザインを適応:table.themeオプション;
#ttheme_gtdefault,ttheme_gtminimal,ttheme_gtbw,ttheme_gtplain
#ttheme_gtdark,ttheme_gtlight,ttheme_gtsimple,ttheme_gtstripes
PointPlot +
  geom_table(data = InsertTable,
             aes(x = X, y = Y, label = Table),
             table.theme = ttheme_gtstripes,
             color = "red", size = 3,
             angle = 0, vjust = 1)
#############


#プロットに基準線を追加:geom_vhlinesコマンド
#x軸:xinterceptオプション
#y軸:yinterceptオプション
PointPlot +
  geom_vhlines(xintercept = 20, yintercept = 80,
               linetype = "dashed", color = "red")
#############


#プロットにプロットを追加:geom_plotコマンド
#プロットに装飾プロットを追加:annotateコマンド
#プロットに追加するプロットを準備
#散布図を作成
InsertPlot <- tibble(X = 0, Y = 150) %>%
  mutate(Plot = list(TestData %>%
           filter(dplyr::between(X_Data, 30, 50) &
                    dplyr::between(Y_Data, 65, 85)) %>%
           ggplot(aes(x = X_Data, y = Y_Data, col = Group)) +
           geom_point(show.legend = FALSE, size = 2) +
           scale_color_manual(values = c("red", "#505457",
                                         "#4b61ba", "#a87963")) +
           theme_bw()))
#BoxPlotを作成
InsertBoxPlot <- tibble(X = 50, Y = 150) %>%
  mutate(Plot = list(TestData %>%
                       filter(dplyr::between(X_Data, 30, 50) &
                                dplyr::between(Y_Data, 65, 85)) %>%
                       ggplot(aes(x = X_Data, y = Y_Data,
                                  group = Group, fill = Group)) +
                       geom_boxplot(show.legend = FALSE) +
                       scale_color_manual(values = c("red", "#505457",
                                                     "#4b61ba", "#a87963")) +
                       theme_bw()))

#プロットに設定
PointPlot +
  #散布図を追加
  geom_plot(data = InsertPlot, aes(x = X, y = Y, label = Plot)) +
  #BoxPlotを追加
  geom_plot(data = InsertBoxPlot, aes(x = X, y = Y, label = Plot)) +
  #annotateコマンドで枠を追加
  annotate(geom = "rect",
           xmin = 30, xmax = 50, ymin = 65, ymax = 85,
           linetype = "dotted", fill = NA, colour = "red",
           size = 1.5)
#############


#プロットにグループ毎のcentroidを追加:stat_centroidコマンド
PointPlot +
  stat_centroid(shape = "cross", size = 4)
#############

#基準で四分割し出現数を表示:stat_quadrant_countsコマンド
#平均で基準を作成
MeanData <- TestData %>%
  summarise(X_Data = mean(X_Data), Y_Data = mean(Y_Data))

#プロットに設定
#x軸:xinterceptオプション
#y軸:yinterceptオプション
PointPlot +
  stat_quadrant_counts(colour = "red",
                       xintercept = MeanData$X_Data,
                       yintercept = MeanData$Y_Data) +
  geom_vhlines(xintercept = MeanData$X_Data,
               yintercept = MeanData$Y_Data,
               linetype = "dashed", color = "red")
#############

#密度の低い場所から指定した基準でハイライト:stat_dens2d_filterコマンド
#詳細は「?stat_dens2d_filter」
PointPlot +
  stat_dens2d_filter(keep.fraction = 1/2, #keep.number = 50,
                     colour = "black", size = 4, shape = 1)
########

出力例

・例えばgeom_text_npcコマンドでfacet_wrapを適応

・プロットにテーブルを追加する:geom_tableコマンド

・プロットに基準線を追加:geom_vhlinesコマンド

・プロットにプロットを追加:geom_plotコマンド

・プロットにグループ毎のcentroidを追加:stat_centroidコマンド

・基準で四分割し出現数を表示:stat_quadrant_countsコマンド

・密度の低い場所から指定した基準でハイライト:stat_dens2d_filterコマンド


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

タイトルとURLをコピーしました