2006-01-25

Gnuplot で日々のランキングをグラフにする

Gnuplot で日付を含むデータ (例えば下のようなもの) をグラフに直す Tips について。

2006-01-24      929     56      30
2006-01-23      923     56      30
2006-01-22      1060    58      33
2006-01-21      1245    64      36
2006-01-20      1577    74      41
2006-01-19      2030    80      45
2006-01-18      2794    93      54
2006-01-17      3711    107     61

このデータは clmemo@akaブログランキング ドット ネットでのランキング。昨日のエントリーは、実はこのための前振り。

Gnuplot のバージョンは 4.0。

Gnuplot のスクリプト

まずスクリプトを招介して、後でコードの説明を個別にしやう。スクリプト名は blogranking.net.gp。データは blogranking.net.dat に保存。

unset key
set terminal png
set output 'blogranking.net.png'
set style data linespoints
#
# Time
#
set xdata time
set timefmt "%Y-%m-%d"
set format x "%m/%d"
#
# Ranking
#
set yrange [-4000:0]
set ytics ("1" 0, "500" -500, "1000" -1000, "2000" -2000, "3000" -3000, "4000" -4000)
plot 'blogranking.net.dat' using 1:(-$2)
set style

set style data で、データをプロットすると明示。続く linespoints で、データを + 記号で表示して、それを線で結ぶようにした。Gnuplot のデータ・プロットはデフォールトで散布図となる。この場合、線で結ぶ方が見易いが lines オプションだけではどこに点があるか見難くかったので、記号と線の両方で表示する linespoints を選んだ。

Time

set xdata time で横軸 (x 軸) には時間データを表示させることを明示。続けて、set timefmt "%Y-%m-%d" で時間のフォーマットを Gnuplot に教える。ここで、%Y は 4 桁の年号を、%m は月、%d は日にちを表す。最後に x 軸の目盛に表示されるラベルを編集。デフォールトだと 01/17 00:00 のように表示される。時刻の部分は要らないから set format x "%m/%d"" で月と日にちだけ表示させるようにした。

Ranking

縦軸にはランキングの順位を取った。データ・ファイルの左から「日にち」「総合ランキング順位」「カテゴリー・ランキング順位」「サブカテゴリー・ランキング順位」。今回、「総合ランキング順位」からデータを取るので、using 演算子を使って一カラム目と二カラム目のデータをプロットする。gnuplot はカラムを 1 から数えるので、using 1:2 で plot。

このままプロットすると、右肩下がりのグラフができる。順位は上がってるのだから、右肩上がりのグラフを作りたい。そこで、順位にマイナスをかけてグラフを描くようにした。データをプロット前にいじるには、using 1:f($2) というような書き方をすればいい。今回はマイナスをかけるだけの簡単な演算なので、using 1:(-$2)

データ値がマイナスになったので、あわせて y 軸も調整する。y 軸のレンジは -4000 から 0 まで (set yrange [-4000:0])。目盛は

set ytics ("ラベル" 数値, "ラベル 数値, ...)

という書き方ができるので、マイナスをプラスに強引に書き直した。

以上。

できた図はこんな感じ。

最近一週間の総合ランキング

No comments:

Post a Comment