Rで解析:geom_pointへのテキストやラベルの付与に便利な「ggrepel」パッケージ

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

ggplot2パッケージで散布図の作成に便利なgeom_pointコマンドがありますが、プロットシンボルにテキストやラベルの情報を付与しようとすると位置の調整が非常に面倒でした。そんな面倒を解決できるパッケージの紹介です。

geom_pointにテキストとラベルを付与する「ggrepel」パッケージの「geom_text_repel, geom_label_repel」実行例をを紹介します。

参考:ggplot2パッケージの基本的な使い方
https://www.karada-good.net/analyticsr/r-78/

また、参考までに「ggiraph」パッケージにはインタラクティブで表示する 「geom_text_repel_interactive」 コマンド と 「geom_label_repel_interactive」コマンドが収録されています。 「geom_label_repel_interactive」コマンド の使用例を「実行コマンド」最下部に紹介します。

パッケージバージョンは0.9.1。実行コマンドはwindows 11のR version 4.1.2で動作を確認しています。

スポンサーリンク

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

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

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

実行コマンド

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

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

###データ例の作成#####
n <- 30
TestData <- data.frame(Group = sample(paste0("Group", 1:5), n, replace = TRUE),
                       Data1 = rnorm(n), Data2 = rnorm(n) + rnorm(n) + rnorm(n))

###ggplot2&#12391;&#22522;&#26412;&#12392;&#12394;&#12427;&#25955;&#24067;&#22259;&#12434;&#20316;&#25104;#####
PointPlot <- ggplot(TestData, aes(x = Data1, y = Data2,
                                  label = Group, color = Group,
                                  fill = Group)) + geom_point()
#&#12503;&#12525;&#12483;&#12488;
PointPlot

###&#12503;&#12525;&#12483;&#12488;&#12395;&#12486;&#12461;&#12473;&#12488;&#34920;&#31034;#####
#ggplot2&#12497;&#12483;&#12465;&#12540;&#12472;:geom_text&#12467;&#12510;&#12531;&#12489;
#PointPlot + geom_text()

#ggrepel&#12497;&#12483;&#12465;&#12540;&#12472;:geom_text_repel&#12467;&#12510;&#12531;&#12489;
#&#21021;&#26399;&#20307;&#35009;&#12391;&#12503;&#12525;&#12483;&#12488;
PointPlot + geom_text_repel()

#&#20307;&#35009;&#12434;&#22793;&#26356;&#12375;&#12390;&#12503;&#12525;&#12483;&#12488;
#ggplot2&#12398;&#12464;&#12521;&#12501;&#35201;&#32032;&#12364;&#20351;&#29992;&#12391;&#12365;&#12414;&#12377;
#ggplo2&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;&#12399;&#12371;&#12385;&#12425;&#12363;&#12425; #https://www.karada-good.net/analyticsr/r-78/
PointPlot + geom_text_repel(
  #&#25991;&#23383;&#12398;&#20307;&#35009;
  fontface = "bold",
  #&#32218;&#12398;&#33394;
  segment.color = "#4b61ba",
  #&#32218;&#12398;&#22826;&#12373;
  segment.size = 1.5,
  #&#12521;&#12505;&#12523;&#12414;&#12391;&#12398;&#36317;&#38626;
  min.segment.length = 0.1,
  #&#27424;&#25613;&#20516;&#12398;&#38500;&#22806;
  na.rm = TRUE,
  #&#20961;&#20363;&#12434;&#38750;&#34920;&#31034;
  show.legend = FALSE)
########
  
###&#12503;&#12525;&#12483;&#12488;&#12395;&#12521;&#12505;&#12523;&#34920;&#31034;#####
#ggplot2&#12497;&#12483;&#12465;&#12540;&#12472;:geom_label&#12467;&#12510;&#12531;&#12489;
#&#12486;&#12461;&#12473;&#12488;&#12398;&#33394;&#12434;&#30333;&#12395;&#22793;&#26356;&#12375;&#12390;&#12356;&#12414;&#12377;
#PointPlot + geom_label(color = "white")
  
#ggrepel&#12497;&#12483;&#12465;&#12540;&#12472;:geom_label_repel&#12467;&#12510;&#12531;&#12489;
#&#21021;&#26399;&#20307;&#35009;&#12391;&#12503;&#12525;&#12483;&#12488;
PointPlot + geom_label_repel(color = "white")

#&#20307;&#35009;&#12434;&#22793;&#26356;&#12375;&#12390;&#12503;&#12525;&#12483;&#12488;
#ggplot2&#12398;&#12464;&#12521;&#12501;&#35201;&#32032;&#12364;&#20351;&#29992;&#12391;&#12365;&#12414;&#12377;
#ggplo2&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;&#12399;&#12371;&#12385;&#12425;&#12363;&#12425;
#https://www.karada-good.net/analyticsr/r-78/
PointPlot + geom_label_repel(
  #&#25991;&#23383;&#12398;&#20307;&#35009;
  fontface = "bold",
  #&#32218;&#12398;&#33394;
  segment.color = "#4b61ba",
  #&#32218;&#12398;&#22826;&#12373;
  segment.size = 1,
  #&#12521;&#12505;&#12523;&#12414;&#12391;&#12398;&#36317;&#38626;
  min.segment.length = 0.1,
  #&#27424;&#25613;&#20516;&#12398;&#38500;&#22806;
  na.rm = TRUE,
  #&#20961;&#20363;&#12434;&#38750;&#34920;&#31034;
  show.legend = TRUE) +
  #&#12521;&#12505;&#12523;&#32972;&#26223;&#33394;&#12398;&#35519;&#25972;
  scale_fill_manual(values = c("#a87963", "#8a5136",
                               "#6e5f72", "#28231e", "#d9bb9c"))
  
########
  
###&#12362;&#12414;&#12369;:ggiraph&#12497;&#12483;&#12465;&#12540;&#12472;&#12434;&#21033;&#29992;&#12375;&#12383;&#12464;&#12521;&#12501;&#12398;&#12452;&#12531;&#12479;&#12521;&#12463;&#12486;&#12451;&#12502;&#21270;#####
#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#32057;&#20171;&#12399;&#12371;&#12385;&#12425;&#12363;&#12425;
#https://www.karada-good.net/analyticsr/r-376/
#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#35501;&#12415;&#36796;&#12415;
#ggiraph&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
if(!require("ggiraph", quietly = TRUE)){
  install.packages("ggiraph");require("ggiraph")
}

###&#12452;&#12531;&#12479;&#12521;&#12463;&#12486;&#12451;&#12502;&#29992;&#12398;&#12487;&#12540;&#12479;&#12434;&#36861;&#21152;#####
#&#12484;&#12540;&#12523;&#12481;&#12483;&#12503;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;:tooltip
TestData$tooltip <- paste0( "&#12464;&#12523;&#12540;&#12503;&#21517; <br/>", TestData[, 1])
#&#12471;&#12531;&#12508;&#12523;&#12463;&#12522;&#12483;&#12463;&#12391;&#34920;&#31034;&#12377;&#12427;&#20869;&#23481;&#12434;&#20316;&#25104;:clickjs
TestData$click <- sprintf("alert(\"%s%s%s%s\")",
                          "X:", round(TestData[, 2], 2),
                          ", Y:", round(TestData[, 3], 2))

#geom_label_repel_interactive&#12467;&#12510;&#12531;&#12489;
PointPlot <- ggplot(TestData, aes(x = Data1, y = Data2,
                                  tooltip = tooltip, onclick = click,
                                  label = Group, color = Group, fill = Group)) +
  geom_point() +
  geom_label_repel_interactive(
    #&#25991;&#23383;&#12398;&#20307;&#35009;
    fontface = "bold",
    #&#32218;&#12398;&#33394;
    segment.color = "#4b61ba",
    #&#32218;&#12398;&#22826;&#12373;
    segment.size = 1,
    #&#12521;&#12505;&#12523;&#12414;&#12391;&#12398;&#36317;&#38626;
    min.segment.length = 0.1,
    #&#27424;&#25613;&#20516;&#12398;&#38500;&#22806;
    na.rm = TRUE,
    #&#20961;&#20363;&#12434;&#38750;&#34920;&#31034;
    show.legend = TRUE) +
  #&#12521;&#12505;&#12523;&#32972;&#26223;&#33394;&#12398;&#35519;&#25972;
  scale_fill_manual(values = c("#a87963", "#8a5136", "#6e5f72",
                               "#28231e", "#d9bb9c"))
#&#12452;&#12531;&#12479;&#12521;&#12463;&#12486;&#12451;&#12502;&#12395;&#12503;&#12525;&#12483;&#12488;
girafe(ggobj = PointPlot)

出力例

・geom_text_repelコマンド:初期体裁

geom_text_repel

・geom_text_repelコマンド:体裁を変更

geom_text_repelEx

・geom_label_repelコマンド:初期体裁

geom_label_repel

・geom_label_repelコマンド:体裁を変更

geom_label_repelEx

・ggiraphパッケージを利用したグラフのインタラクティブ化


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

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