プロが教えるわが家の防犯対策術!

ここに質問するのは間違っているように思えますが、
プログラマの方だと誰かしらこれと同じ事をやったことがあるのではないかと思い、ここに質問させていただきます。
GNUPLOTというソフトを使って、
(1)ファイルに書き込まれているデータを読み込み、
(2)それをGIFに折れ線グラフで出力させる、
という処理をしたいのですが、なかなかGNUPLOTに関する
情報が少なくて困っています。
ファイルの中身というのは
2001/05 1005
2001/06 1300
2001/07 1080
2001/08 2006

というような、テキストファイルで各列ごとはスペースで区切られています。
これはある一定期間の来場者数をファイリングしたもので、
2001年5月には1005名。2001年6月には1300名......といった感じです。
これをx軸に年月、y軸に人数というように折れ線グラフにして出力させたいのですがどうしたら良いものでしょうか?
コマンド一つ一つ教えていただけると非常にありがたいです。
どうか宜しくお願いいたします。

A 回答 (1件)

bridgeさんがお使いのOSはWindowsですか?


私はLinux使いですが、コマンドラインから実行するのなら
同じだと思いますので一応Linuxでのやり方を書いておきます。

*******************************************************
読み込むデータファイルの名前をData.txtとしておきます。
読み込むデータファイルを置いてあるディレクトリでgnuplotを起動します。
コマンドラインで
gnuplot
とタイプすると
gnuplot>
というプロンプトが現れます。ここにコマンドを入れていきます。

(1)入力形式の指定
各座標データが単なる数字でかかれているデータなら
gnuplot> plot 'Data.txt' with lines
と入れてやればすぐディスプレイに表示されるのですが
入力ファイルの第一座標が日時形式になっているので
まず入力形式を指定してやる必要があります

gnuplot> set xdata time
これはx軸の入力データを時間として設定しています。

gnuplot> set timefmt "%Y/%m"
時間としての入力データの形式を指定しています。%Y/%mというのは
年/月
という形のデータであることを指定しています。年は西暦4桁です。

(2)グラフ描画
次にデータを読み込んでグラフ表示をさせます。

gnuplot> set xrange ["2000/09":"2001/08"]
gnuplot> set format x "%Y/%m"
gnuplot> plot 'Data.txt' using 1:2 with lines
最初のコマンドはx軸の範囲を指定しています。
2つめはx軸の数値の書き方を指定しています。この場合は入力と
同様に 年/月の形で表示します。
最後にデータをプロットして直線でつないだ折れ線グラフを描きます。
plot 'Data.txt' はData.txtを読み込んでグラフを書くことを
指定しています。その次の using 1:2 はデータの1列めと2列めを
それぞれxとyの入力とするという指定です。最後の with lines はデータ
同士を直線でつなぐ指定です。
このようにして描いたグラフのy軸の最小値は、デフォルトでは0でなく
データの最小値になります。
y軸の最小値を0にしたいのならplotの前に
gnuplot> set yrange [0:]
を付け加えます


さらに折れ線グラフではなく棒グラフにしたいのなら、最後のplot
の代わりに

gnuplot> set boxwidth -2.0
gnuplot> plot 'Data.txt' using 1:2 with boxes

として下さい。最初のコマンドは棒の幅を指定しています。
ここに-2.0を指定するとちょうど隣同士の棒がくっつき合うように
幅が自動調節されます。
棒の間隔を空けたければここに適当な値を指定します。
ただしここでは入力を時間単位にしたので数値は秒単位になります
従ってこののデータの場合、隣同士がくっつき合う時の幅は
3600×24×30=2592000
となります。(実際は2月と3月がわずかに重なるのがわかります)


(3)出力
デフォルトではグラフはディスプレイに表示されます。
最初はディスプレイに表示させて様子を見た方が良いでしょう。
最後にGIFファイルに出力します。ここでは出力するファイルの名前を
Data.gifとします

gnuplot> set terminal gif
gnuplot> set output 'Data.gif'
gnuplot> replot

最初のコマンドは出力形式をGIFに設定しています。
文字のフォントサイズや画像全体の大きさもオプションで指定出来ます。
help gif と打てば詳しい説明が見られます。デフォルトではフォントは
small(6x12 ピクセル)、画像サイズは 640x480ピクセルです。
gifの他に postscriptやpngなど多くの画像形式で出力できます。
set terminal と打てば出力できる形式の一覧が出てきます。
2つめのコマンドは出力ファイルの名前を指定します。
最後にデータを読み込んで描画します。
replot はこのコマンドが読み込まれる前に実行された
最後のplotを実行します。そこで新しくplotしない限り
何回replotしてもreplotの直前の条件でplotされます

------------------------------------------------
何回も同じことをやるのならコマンドラインからいちいちコマンドを打つのも
面倒ですからコマンドをまとめたバッチファイルを作ってしまいましょう。
上に解説したコマンドをまとめて以下のようなテキストファイルを作り
DataPlot.plt という名前で保存します(ファイル名は適当に付けて下さい)
そしてコマンドラインで
gnuplot DataPlot.plt
とすると自動的にバッチファイルを読み込んで実行します。

# DataPlot.plt
set xdata time
set timefmt "%Y/%m"
set xrange ["2000/09":"2001/08"]
set format x "%Y/%m"
#set yrange [0:]
plot 'Data.txt' using 1:2 with lines
pause -1
set terminal gif
set output 'Data.gif'
replot
pause -1


途中にある
pause -1
というコマンドはディスプレイにグラフを表示した後
GNUPLOTを一時停止させるためのものです。
適当なキーを押すと続きを実行します。
またGNUPLOTは#で始まる行を無視するので、コメントを入れたい時は
#で始まる行に書いておきます。

--------------------------------------------

他にもグラフの色を指定したり凡例やタイトルを指定したり
x軸やy軸のスケールや単位を指定したりとさまざまな設定が
出来ますので下のサイトを参考にしていろいろ試してみて下さい。

********************************************

GNUPLOTの役に立つ情報サイト

gnuplotの使い方については1つ目のURLが詳しいです。いろいろなテクニックが
解説してあり参考になります。
2つめは公式マニュアルの日本語化。
3つめはGNUPLOT情報サイト。リンクなどが充実しています。
4つめもリンク集です。
5つめのサイトも役に立つTipsがたくさんあります。
http://art.aees.kyushu-u.ac.jp/members/kawano/gn …
http://www.linux.or.jp/JF/JFdocs/gnuplot.html
http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplo …
http://infofarm.affrc.go.jp/~kadosawa/gnuplot.htm
http://www.nucl.phys.tohoku.ac.jp/~m_isihar/text …

参考URL:http://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/,http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplo …
    • good
    • 0
この回答へのお礼

ご丁寧な回答ありがとうございました。
感動しました。
読み込むファイルをgnuplotを実行している場所と違うところに置いてたらダメなんですね...。
フルパスで指定すればできると思ってました。
そこが間違ってたみたいです。
ありがとうございました。

お礼日時:2001/11/26 12:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!