jQuery: ワタシの主食にはならんけど C3.js はとっても良いぞ

自分のニーズに合う合わないてのはあるわけで。

plotly.js と同じく、C3.jsD3.js に基いている。

最初に言っとくと、ワタシが日常的に使いたいグラフが揃ってるのは plotly.js の方であって、C3.js の品揃えはワタシ的にはまったくもって物足りない。物足りないつーか、「これじゃやりたいことがほとんど出来ない」。

てのは、ほかのとこでも書いたように、ワタシは自然科学系で多用されるチャートの方ばかり使うので、Pie Chart や Donut Chart なんか「必要と思うのは10年に一回」てくらいなのですわ。これは Python を選び、NumPy/SciPy を好み、MatplotLib に惚れ込むタイプのエンジニアならおそらく共通だと思う。(これこそが Python ユーザと Ruby ユーザを大きく隔てるとこだと思う。きっと Ruby ユーザの方が「一般の WEB アプリケーションが望むチャート」を多用するお仕事を多くすると思うので、ということであれば Ruby ユーザの方がより C3.js の方を好む気がする。)

というわけで、C3.js はまったくもって自分のニーズには合わないんだけれど、それでもなお紹介しとこうと思ったのは、「非常に使いやすい優秀なインターフェイスだから」だ。やってみる前からドキュメントを読んだだけで滅茶苦茶印象がいい。

ドキュメントで真っ先にワタシが「ヲ」と思ったのは データの形式の扱いが柔軟なことだった。ほかのライブラリが決まった形式の JSON を強制しがちなのに対し、C3.js は「csv っぽいものさえ簡単に」ぶっ込める。まさに「お気楽ご気楽」だ。これはチャートに渡す前のデータ加工を最小限にするのに役立つ。

もう一つちょっとだけ目を引くのが、チャートタイプのご気楽変換だ。無論こんなんなくても全然困らんけれど、あれば嬉しかろう。

Examples に置かれてるコードはどれもやや独特だ。Donut Chart のこれなどほぼ全てがなぜかやたらに setTimeout を多用してほにゃららしてるのはたぶん D3.js らしさ、を強調したいからだと思う。切り替え時のエフェクトをデモしたいてことよね。けど「そういうかっちょ良さはえぇからすぃんぷるにグラフりたいだけなんぢゃ」てことで単純化しちまえばこんだけ:


いつものように「フレームのソースの表示」しなはれ。例にしたデータは morris.js でやってみたヤツと同じね。(最初に説明した通りワタシが「Donut Chart したくて困る」ことは皆無ではあるものの、plotly.js の Donut がダメ過ぎて死にそうてことなら、C3.js も救世主。)

あとめぼしいものとしては Spline Chart かな。ただしこういう interpolate 系は使うときは「美しい見栄えに騙されないように」注意してね。基本的にこういう補間は「ウソデータを間に突っ込む」ということなんだけど、注意点はそういうことではなくて「オーバーフィッティング」の問題が付きまとう、ということ。機械学習の分野では「過学習」と呼ばれるそれに関係するヤツ。spline 補間であれなんであれこういう関数近似は、「次数を下げればフィットせず、上げればオーバフィットする」。