Rで解析:ggplot2に情報を付与「ggpp」パッケージ


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コマンド


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

スポンサードリンク

スポンサードリンク