付加価値コンテンツとは――スクレイピングからグラフ化までまとめサイト2.0(3/5 ページ)

» 2007年12月21日 13時10分 公開
[大澤文孝,ITmedia]
リスト3■GD::Graphによるグラフ描画の基本

use GD::Graph::linespoints;
# グラフ化するデータ
my @data = (
  # 1つ目はX軸のラベル値
  ['12/1', '12/2', '12/3', '12/4'],
  # 2つ目以降がデータ。
  # それぞれの要素がひとつのグラフになる
  # ここでは4つあるから4本の線が引かれる
  [1, 3, 4, 5],
  [2, 5, undef, 7],
  [7, 10, 6, 5],
  [undef, 10, 7, 3]
);
# グラフオブジェクトを作る
my $graph = 
  GD::Graph::linespoints->new(640, 480);
# オプション設定
$graph->set(
  title => 'test',
  line_width => 1,
  y_min_value => 1,
  y_max_value => 10,
  y_tick_number => 9,
);
# データを渡してプロット
my $gd = $graph->plot(\@data);
open OUT, ">graphimage.png";
binmode OUT;
print OUT $gd->png();
close OUT;

 GD::Graph::linespointsを使って折れ線グラフを描く場合、データの構造は、「1つ目がX軸ラベル」「2つ目以降が実データ列」という構造のリファレンスを渡す。


my @data = (
  # 1つ目はX軸のラベル値
  ['12/1', '12/2', '12/3', '12/4'],
  # 2つ目以降がデータ。
  [1, 3, 4, 5],
  [2, 5, undef, 7],
  [7, 10, 6, 5],
  [undef, 10, 7, 3]
);

 この時、すべての要素の数が揃っていなければならない。描画したくない値が存在するときには、上記のようにundef値を設定する。

 グラフを作るには、まず、GD::Graph::linepointsオブジェクトを用意する。コンストラクタ引数に渡すのは、作成する画像イメージの大きさだ。ここでは解像度を640×480ドット指定とした。


my $graph = 
  GD::Graph::linespoints->new(640, 480);

 次にsetメソッドを呼び出して必要なオプションを設定する。ここではタイトルや線幅、最小値、最大値、軸の目盛間隔を指定した。


$graph->set(
  title => 'test',
  line_width => 1,
  y_min_value => 1,
  y_max_value => 10,
  y_tick_number => 9,
);

 実際にプロットするには、plotメソッドを呼び出す。


my $gd = $graph->plot(\@data);

 plotメソッドの戻り値は、GDオブジェクトとなる。そこで、pngメソッドやjpegメソッドを呼び出して、ファイルなどに書き込めばよい。


open OUT, ">graphimage.png";
binmode OUT;
print OUT $gd->png();
close OUT;

スクレイピングした結果をグラフにする

 以上がグラフ生成の基本的な流れだ。

 「スクレイピングの結果」と「グラフ化処理」を組み合わせれば、週刊ランキング推移のグラフができる。実際に、その処理を実装したのが、リスト4だ。

 そして、図4を生成するスクリプトが、次ページに載せるリスト4である。

図4■リスト4で生成されたグラフ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ