Data Visualization

インタラクティブなグラフは、htmlとjavascriptを使って作成されています。D3.jsを使用すれば、思うがままのインタラクティブなグラフが作れるのでしょう。ただ、javascriptの知識がないとかなり難しい!

Rやpythonから、自動でhtmlとjavascripを書いてくれるパッケージがあるのでそちらを使用した方が私には簡単です。今回は、plotlyを使います。そして、あまり日本語情報のないR側から使います。python側から使う記事は結構あります。

R側から使うメリットとして、Rユーザーなら慣れ親しんだggplotをコード一行でインタラクティブなplotlyのグラフに変換してくれる点が挙げられます。

plotly

まず、plotlylと、htmlwidgetsをインストールします。ggplot2をインストールしていない人は、インストールしてください。

install.packages(plotly)
install.packages(htmlwidgets)

通常通り、ggplotでグラフを作成します。棒グラフをインタラクティブにしてみます。自作でデータを作成します。1列目はグループ名、2列目は数値です。

library(tidyverse)
library(RColorBrewer)

df <- tibble(group = c("A","B","C","D"),
             value = c(10,20,30,40))

g <- ggplot(df, aes(x = group, y = value, fill = group ))+
  geom_bar(stat = "identity")+
  scale_fill_brewer(palette="Pastel1")+
  theme_minimal()

g

ここまではggplotの作成の仕方ですね。これからplotlyの作成の方法です。

library(plotly)
library(htmlwidgets)

fig <- ggplotly(g)
saveWidget(fig, "plotly_sample1.html") 

4行目は、ggplotで作ったグラフをplotlyに変換しています。5行目は、html形式で保存しています。保存はカレントダイレクトリに保存されます。

私のRstudioでは、plotlyはplotsのところに表示されません。通常は表示されるのでしょうか。そのため、保存したhtmlファイルをダブルクリックしてみています。

クライアントや病院内で共有するのであれば、このHTMLファイルをメールで送れば、オフラインでもインタラクティブなグラフを共有できます。

ブログやwordpress等にアップする方法

ホームページに埋め込んで、インタラクティブなグラフをアップしたいと思います。wordpressだと、先ほど作成したhtmlファイルをコードエディターに貼り付けても表示してくれません。その代わりに、plotlyの持っている無料サービスを利用します。plotlyは、chart studioというウェブサービスを持っています。このサイトにアカウント登録して、自分のデータをアップし、そのリンク(iframe)をwordpressに貼り付けることで、実現できます。アップしたデータは、公開されてしまいます。秘匿データはしないように気を付けて下さい。

https://plotly.com/chart-studio/

上記のサイトで、アカウントを作成して設定の画面でusernameとapi keyをメモって下さい。

そして、Rで以下のコードを実行して環境設定します。

Sys.setenv("plotly_username"="あなたのユーザ名")
Sys.setenv("plotly_api_key"="あなたのAPIキー")

その後、さきほど作成したggplotをggplotlyで変換します。そして、api_createというコマンドで、chart studioにファイルをアップロードします。

fig <- ggplotly(g)
api_create(fig, filename = "samplebar")

chart studioのサイトにアクセスすると、今アップしたグラフがMy Files表示されます。そのグラフを表示させて、地球マークを押すと以下の画面になります。

iframeというところを押すと、ショートコードがでてきます。これを、wordpressのカスタムhtmlに貼り付けると、埋め込みができます。

マウスホバーの内容をカスタマイズ

4次元データを2次元で表現します。

df2 <- tibble(group = c("A","B","C","D"),
             value1 = c(10,20,30,40),
             value2 = c(40,30,20,10),
             value3 = c(1,2,3,4)
              )

g2 <- ggplot(df2)+
  geom_point(aes(x = value1,
                 y = value2,
                 color = group,
                 size = value3))+
  scale_size(range = c(5, 20))+
  scale_color_brewer(palette="Pastel1")+
  theme_minimal()

fig <- ggplotly(g2,
                tooltip = c("x","y","size"))
htmlwidgets::saveWidget(fig, "plotly_sample2.html") 

ggplotlyのなかのtooltipの中に、マウスホバーしたときに表示したい要素を記述します。” ”で囲むのが重要です。表示させるものを、x要素とy要素とsize要素に設定します。(なぜか、colorは表示できませんでした)

パワポに貼り付ける方法

category