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

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