Railsメモ(29) : Chartkickで簡単にグラフを描画する
Railsで簡単にグラフを描画してみたいのでgemを調べてみたところ下記gemがヒットした。Highcharts, Google Charts, Gruffといったライブラリが使えるらしい。
- GitHub - ankane/chartkick: Create beautiful JavaScript charts with one line of Ruby
- GitHub - michelson/lazy_high_charts: Make highcharts a la ruby , works in rails 4.X / 3.X, and other ruby web frameworks
- GitHub - topfunky/gruff: Gruff graphing library for Ruby
- GitHub - mattetti/googlecharts: Ruby Google Chart API
- GitHub - PerfectlyNormal/highcharts-rails: Simple gem to include Highcharts in a Rails 3.1 (or above) app
gemとしてはどれが人気なのかGitHubのスター数などを確認したところ、chartkickが人気のようだ。どうやらchartkickはGoogle ChartsとHighchartsの両方に対応しているらしい。
名前 | Watch | Star | Fork |
chartkick | 96 | 3131 | 292 |
lazy_high_charts | 32 | 868 | 183 |
gruff | 28 | 740 | 148 |
googlecharts | 15 | 676 | 107 |
highcharts-rails | 7 | 147 | 30 |
Chartkickのインストール
Chartkickでどんなグラフを描画できるかは下記リンクで確認できる。
Gemfile
に下記行を追加してbundle install
する。
gem "chartkick"
次に、JavaScriptをインクルードするために下記行を追加する。今回はapp/views/layouts/application.html.erb
のheadタグ内に追加した。
これはGoogle Chartsを利用するためのタグだが、Highchartsを使用する場合は別の記述なので後で試してみる。
<%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %>
Chartkickの使い方
Chartkickで利用可能なグラフの種類は以下の通り。
- Line chart
- Pie chart
- Column chart
- Bar chart
- Area chart
- Geo chart
- Timeline
- Multiple series
手始めに、動作確認としてデータを直接ビューファイルに記述してみる。以下のようにHashとArrayに対応しており、図のようなグラフが表示された。
最初にpie_chart
のようなグラフの種類を指定して、次に表示するデータを渡せば簡単にグラフが描画できる。
<%= pie_chart ({ "Football": 10, "Basketball": 5 }) %> <%= column_chart [["Football", 10], ["Basketball", 5]] %>
通常はDBからデータを取ってくるので、
<%= pie_chart @data %>
のようにコントローラーで取得したデータを表示したり、
<%= pie_chart Artist.limit(10).pluck(:name, :songs_count) %>
あるいはビューに直接記述しても動作する。
Chartkickのオプション
オプションの指定方法は上記リンクに説明があるが、グラフ個別のオプションについては以下のように指定する。
<%= line_chart data, id: "users-chart", height: "500px" %> <%= line_chart data, min: 1000, max: 5000 %> <%= line_chart data, colors: ["pink", "#999"] %>
全てのグラフに適用するオプションについてはconfig/initializers/chartkick.rb
に
Chartkick.options = { height: "400px", colors: ["pink", "#999"] }
のような形式で記述する。
Highcartsを使用する
Highcharts(商用の場合は有償らしい)を使用するためにはJavaScriptファイルが必要なので下記ページからダウンロードして自分で配置するか、
CDNにホストされたものを使用する。
使用するためにはhighchart.js
があればよい。
<%#= javascript_include_tag '//www.google.com/jsapi', 'chartkick' %>< <%= javascript_include_tag '//code.highcharts.com/highcharts.js', 'chartkick' %><
これでグラフがHighchartsを使用したものに変わる。Highchartsはデフォルトでアニメーションが有効になっているようでグラフを表示するときに動きがあって面白い。
group_by_day, group_by_week
ちなみに、READMEにgroup_by_day
やgroup_by_week
というメソッドがあったが、これは同じ作者によるgroupdate
というgemをインストールすれば使用できるようになる。試してみようと思ったがSQLiteだとエラーになってしまった。どうやらサポートしているDBは PostgreSQLとMySQLだけらしい。残念。
[1] pry(main)> Song.group_by_day(:created_at).count RuntimeError: Connection adapter not supported: SQLite from /home/vagrant/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/groupdate-2.4.0/lib/groupdate/magic.rb:87:in `relation'
- 出版社/メーカー: アスベル
- メディア: ホーム&キッチン
- この商品を含むブログを見る