リスト4は比較的長く、今まで説明してきた内容の組み合わせとデータ処理となっている。このため、詳細な説明は割愛する。ただし1点だけ、「Y軸の操作」について補足しておきたい。
図3と図4を見比べるとわかるが、図4ではランキングの「1」が上になっているのに対し、図3では「10」が上になっている。
実は、GD::Graphモジュールによる折れ線グラフでは、図3に示した「上に向けて値が大きくなるグラフ」が基本であり、図4に示した「下に向けて値が大きくなるグラフ」が描けない。
これは、「値を負にする」ことによって、なかば強引に実現しているのだ。ソースを見ると分かるが、リスト4では、ランキング順位の「1」〜「10」の値ではなく、それを負の値とした「-1」〜「-10」としてグラフを描画している。これにより、上下逆となるのだ。
しかし、そのままだと、Y軸のラベルの値も負になってしまう。この問題を解決するのがy_number_formatオプションだ。リスト4では、次のように設定してある。
$graph->set(
title => 'ranking',
line_width => 1,
y_min_value => -10,
y_max_value => -1,
y_tick_number => 9,
y_number_format =>
sub {my $value = shift; return -$value;});
y_number_formatはY軸ラベルを描画しようとするときに呼び出される。ここで値の正負を逆にしているので、図4に示したように、上下が逆になったグラフが描画できる。
今回の記事では、Web::Scraperモジュールを使ったスクレイピングと、GD::Graphを使ったグラフ化について説明した。
題材が「ブログの週間ランキング」であるということもあり、入れ替わりが激しく、グラフ化をしても遷移が把握しづらいという面もあった。しかし、これを応用して例えば「売上ランキング」や「価格変動」をグラフ化するといった場面では、今回説明した実装が、有意義に生かせるのではないだろうか?
この先は、読者の発想で応用してみてほしい。
Copyright © ITmedia, Inc. All Rights Reserved.