前回までreveal.jsとorg-revealを使ったスライド作成についてまとめてきたが,interactiveなスライドの作成には触れていない.そこで,これから何回かに分けてインタラクティブなスライドを作るための私の試行錯誤を後日の自分のためにまとめておくことにした.第1回目の今回はD3.jsについてである.
D3.js
Rainbow Worm
D3.jsとはデータに基づいて文書を操作するためのJavaScript libraryである,と御本家に書いてあるが,これだけではよく分からない.私としてはウェブページの図がインタラクティブになるように設定したり,図の動きを設定したりするもの(上図のようなもの)ぐらいに理解した.d3について膨大な情報がネットに流れているのでそれを利用すれば良い,と言うのは易く,行なうのは難い(笑).とりあえず情報を独断と偏見で以下にまとめた.
References
- D3 Data-Driven Documents 御本家
- Client-Side Web Development Webの基礎知識をつけるために素人が流し読みするには最適
- Interactive Data Visualization for the Web, 2nd Ed 下記のサイトでベストと推薦
- Resources that are useful 色々なリソースを集積してくれている
- D3.js と reveal.js の紹介
- これから D3.js を始める人のためのメモ
- Can D3.js visualizations be served using Hugo? HugoでのD3.jsの使い方
- Rainbow Worm
注意点
D3.jsはv3, v4, v5があり,v3からv4, v5にupgradeした時に色々と変更されており,ウェブで見たら動いているのに,ローカルにコピーして,自分でコードを変更したら動かない,なんて時はversionが違うせいのことがあるので注意.
How to insert a figure created by d3.js into blog by hugo
それではインタラクティブなスライドを作成する前に,実際にこのページにd3.jsで書いた図を埋め込んでみよう.ただのグラフでは面白くないので,有名な(?)Rainbow Wormを埋め込むことにした.やり方は上にあげたCan D3.js visualizations be served using Hugo?にあるとおり.Rainbow Wormにあるコードのうちscript以下の部分をコピーし以下のように若干変更して,RainbowWorm.jsとして保存する.
|
|
最初の部分の変更は大きさや位置の調整である.25行目の var svg = d3.select("#demo").append(“svg”) の部分は元のままでも良いと思うが,何かを参考にbodyをdemoに書き換えた.このRainbowWorm.jsを/Users/taipapa/Data/MyBlog/Taipapablog/static/js/に保存すればhugoが読みに行ってくれる(要するにhugoのstatic directory以下に保存すれば良い.subdirectoryを作っても良い).そして,以下のようにox-hugoの原稿に書き込む.
#+begin_export html
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<div id='demo'></div>
<script src="/js/RainbowWorm.js"></script>
#+end_export
(最初の行が,d3.v3.min.js とversion 3であることに注意.version 5を意味するv5にすると動かない)
これでC-c C-e HAによりexportすれば,最初の図のようにrainbow wormが表示される.美しい...
となるはずであったが,localhostではRainbow wormが表示されるのに,GitHubにアップすると消えてしまう.色々やってみたが,ダメであった….. 😭 後日さらに検討するとして,とりあえず,記録のためにこのままアップしておく.
How to insert a figure created by d3.js into slide by reveal.js
それでは,スライドにd3.jsで作成した図,今回はRainbow wormを埋め込んでみよう.上述のコードをox-revealのファイルに書き込めば良い. #+REVEAL_HTML: をつけるのがミソである.
* Rainbow Worm
#+REVEAL_HTML: <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
#+REVEAL_HTML: <div id='demo'></div>
#+REVEAL_HTML: <script src="/js/RainbowWorm.js"></script>
これでexportすれば,スライドタイトルが “Rainbow Worm” となりその下にrainbow wormが蠢いているhtml スライドができる.せっかくなので,出来上がったスライドを,http://taipapamotohus.com/MySlide%5Fv2/にアップしておくとともに,このページにも埋め込んでおくことにする.前々回の記事(How to create presentation slides by reveal.js and org-mode (org-reveal) Part2 )で説明したボックス,カラー,シャドウの追加なども行って,D3.jsも加えて置く.Rainbow wormは最後のページ(9ページ)に表示されている.
となるはずであったが,localhostではこちらもまたスライドが表示されるのに,GitHubにアップすると消えてしまう.色々やってみたが,ダメであった….. 😭 こちらも後日さらに検討するとして,とりあえず,記録のためにこのままアップしておく.なお,http://taipapamotohus.com/MySlide%5Fv2/にアップしたスライドはちゃんとRainbow wormが動いているので確認していただきたい
よく考えてみたら,rainbow wormではinteractive slideとは言えないことに気が付いたが,その辺りは次回以降で検討していくことにする.どうしてもあれは載せてみたかった....
ここまでで,hugoで作成するブログやreveal.jsで作成するスライドにD3.jsで作成する画像やグラフを埋め込む方法は分かった(うまくいってない部分もあるが...).しかし,一番の問題は,d3.jsでグラフを作成するのが(私には)とても面倒である,と言うことである.Rなら,使い慣れているので,Rで作ったグラフをインタラクティブにできないかと考えた.ん,そう言うものがあったような...
と言うことで,ようやく Plotly の存在を思い出した.とりあえず,今回はここまで.苦労した挙句に,どうやらD3.jsは,私にはあまり使えそうにないと言うことが分かったと言う顛末である…..😅
次回はplotlyについてまとめるつもりである.