Google::Chartの使い方

さくっとグラフを描く

Cactiでグラフを作成しようと思っていたデータがあったのですが,色々なしがらみが面倒になったので,ローカルにデータを取得してグラフ化することにしました.どうやってグラフ化するかちょっと考えて,思い出したのがGoogle::Chartでした.まず作ろうと思ったのが棒グラフ.これはこんな感じで動きます.ワンライナーなので,本来は1行です.

perl -MGoogle::Chart -le '
  $c = Google::Chart->new(
    type => "Bar",
    color => ["4d89f9","c6d9fd"],
    data => [[1,2,3,4,5,6],[7,8,9,10,11,12]]
  );
  print $c->as_uri'

こんなグラフができあがります.ところがこのスクリプトに必要なデータを突っ込もうとしたら動きませんでした.

perl -MGoogle::Chart -le '
  $c = Google::Chart->new(
    type => "Bar",
    color => ["4d89f9","c6d9fd"],
    data => [[101],[101]]
  );
  print $c->as_uri'

つまりこういうのです.どうも値が100を越えるとだめなようです.

Google::Chart::Data::Extendedを使う

testスクリプトやいくつかのモジュールを眺めていたらGoogle::Chart::Data::Extendedというのを見つけました.どうやら100を越える値を使う時にはこれを使う必要があるようです.

perl -MGoogle::Chart -MGoogle::Chart::Data::Extended -le '
  $c = Google::Chart->new(
    type => "Bar",
    color => ["4d89f9","c6d9fd"],
    data => Google::Chart::Data::Extended->new(
      dataset => [[100,101,102,103,104,105],[100,101,102,103,104,105]],
      max_value => 200)
  );
  print $c->as_uri'

これを実行するとこういうグラフになります.ここまでできると,今度は軸にラベルをつけたくなりますね.その時にはこうします.

perl -MGoogle::Chart -MGoogle::Chart::Data::Extended -le '
  $c = Google::Chart->new(
    type => "Bar",
    color => ["4d89f9","c6d9fd"],
    data => Google::Chart::Data::Extended->new(
      dataset => [[100,101,102,103,104,105],[100,101,102,103,104,105]],
      max_value => 200),
    axis => [
      {location => "x", labels => [1,2,3,4,5,6]},
      {location => "y", labels => [0,50,100,150,200,250,300]}
    ],
  );
  print $c->as_uri'

こんなグラフになります.

おまけ

最後にタイトルをつけてみます.

perl -MGoogle::Chart -MGoogle::Chart::Data::Extended -le '
  $c = Google::Chart->new(
    type => "Bar",
    color => ["4d89f9","c6d9fd"],
    data => Google::Chart::Data::Extended->new(
      dataset => [[100,101,102,103,104,105],[100,101,102,103,104,105]],
      max_value => 200),
    axis => [
      {location => "x", labels => [1,2,3,4,5,6]},
      {location => "y", labels => [0,50,100,150,200,250,300]}
    ],
    title => { text => 'Sample1'},
  );
  print $c->as_uri'

これでこんなグラフになります.えーと,元々何しようとしてたんだっけ….結構時間かかってしまいましたよ.