本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:ggplot2をインタラクティブに!「ggiraph」パッケージ

「ggplot2」パッケージのグラフをインタラクティブにするパッケージの紹介です。実行コマンドではgeom_pointとgeom_boxplotをインタラクティブにする「geom_point_interactive」と「geom_boxplot_interactive」コマンドを紹介します。また、htmlファイルで作業フォルダに保存するコマンドも紹介します。

多くのコマンドが収録されたパッケージです。紹介しきれないコマンドは下記HPを参考にしてください。

ggiraph:https://davidgohel.github.io/ggiraph/index.html

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

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

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

#パッケージのインストール
install.packages("ggiraph")
スポンサーリンク

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。クリックで表示する文字がUTF-8でないとエラーが起きます。日本語の表記エラー防止に「stringi」パッケージの「stri_enc_toutf8」コマンドを使用しています。

また、出力をhtmlファイルで保存するために「htmlwidgets」パッケージの「saveWidget」コマンドを使用しています。

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

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
#stringiパッケージがなければインストール
if(!require("stringi", quietly = TRUE)){
  install.packages("stringi");require("stringi")
}
set.seed(1234)
n <- 100
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   ID = sample(LETTERS[1:5], n, replace = TRUE),
                   X_num_Data = sample(c(1:30), n, replace = TRUE),
                   Y_num_Data = sample(c(51:100), n, replace = TRUE)) %>%
  #ツールチップデータ
  mutate(Tooltip = paste0( "グループ名<br>", Group)) %>%
  #クリックで表示するデータ
  mutate(Click = stri_enc_toutf8(sprintf("alert(\"Xの値は%sです。<br>Yの値は%sです。\")",
                                         round(X_num_Data, 2), round(Y_num_Data, 2))))
########

##geom_point_interactiveコマンド
#散布図
ggplot(TestData, aes(x = X_num_Data, y = Y_num_Data,
                     color = Group)) +
  geom_point() + 
  labs(x = "Data1", y = "Data2", title = "TEST PLOT", color = "Group Name")

#インタラクティブな散布図
#aesにオプションを追加
#マウスオーバーで情報表示:tooltipオプション
#クリックで情報表示:onclickオプション
PlotData <- ggplot(TestData,
                   aes(x = X_num_Data, y = Y_num_Data,
                       color = Group, tooltip = Tooltip,
                       onclick = Click))

#散布図のインタラクティブ化:geom_point_interactiveコマンド
PlotData <- PlotData +
  geom_point_interactive() + 
  labs(x = "Data1", y = "Data2",
       title = "Interactive Point_Plot", color = "Group Name")

#インタラクティブなグラフをプロット:girafeコマンド
girafe(ggobj = PlotData)
##########################################################

##geom_boxplot_interactiveコマンド
#BoxPlot
ggplot(TestData, aes(x = ID, y = Y_num_Data,
                     fill = ID)) +
  geom_boxplot() + facet_grid(~Group) +
  labs(x = "Data1", y = "Data2", title = "TEST PLOT", color = "Group Name")

#インタラクティブな箱ひげ図
#aesにオプションを追加
#グループ表示:data_idオプション
PlotData <- ggplot(TestData,
                   aes(x = ID, y = Y_num_Data,
                       tooltip = ID, data_id = ID))

#箱ひげ図のインタラクティブ化:geom_boxplot_interactiveコマンド
PlotData <- PlotData +
  geom_boxplot_interactive() +
  facet_grid(~Group) +
  labs(x = "ID", y = "Y_num_Data",
       title = "Interactive Box_Plot", fill = "Group Name")

#インタラクティブなグラフをプロット:girafeコマンド
#マウスオーバー時の色を設定:opts_hoverオプション
girafe(ggobj = PlotData,
       options = list(
         opts_hover(css = "fill:#5c463e;cursor:pointer;")))
##########################################################

###参考:htmlファイルで作業フォルダに保存#####
#htmlwidgetsパッケージがなければインストール
if(!require("htmlwidgets", quietly = TRUE)){
  install.packages("htmlwidgets");require("htmlwidgets")
}
#saveWidgetコマンドで保存
#girafeコマンドをwidgetオプションに指定
saveWidget(file = "geom_boxplot_interactive.html",
           widget = girafe(ggobj = PlotData,
                           options = list(
                             opts_hover(css = "fill:#5c463e;cursor:pointer;"))))

出力例

・geom_point_interactiveコマンド

ポイントをクリックするとデータが表示されます。

・geom_boxplot_interactiveコマンド

BoxPlotをマウスオーバーすると同じIDのBoxPlotの色が変化します。

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.