ここに質問するのは間違っているように思えますが、
プログラマの方だと誰かしらこれと同じ事をやったことがあるのではないかと思い、ここに質問させていただきます。
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軸に人数というように折れ線グラフにして出力させたいのですがどうしたら良いものでしょうか?
コマンド一つ一つ教えていただけると非常にありがたいです。
どうか宜しくお願いいたします。
No.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 …
ご丁寧な回答ありがとうございました。
感動しました。
読み込むファイルをgnuplotを実行している場所と違うところに置いてたらダメなんですね...。
フルパスで指定すればできると思ってました。
そこが間違ってたみたいです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ショートカットをデスクトップ...
-
FTPの連続実行でフリーズする
-
コマンドプロンプトをクリック...
-
C言語中でunixのコマンドを使...
-
バッチファイル reg queryした...
-
Pythonで単純にファイルを結合...
-
シェルの「:コマンドが見つか...
-
バッチ終了時にDOS窓を閉じるコ...
-
Windows バッチファイル ATに...
-
バッチファイル 文字列にスペ...
-
clコマンドで実行ファイルの出...
-
【ppt、VBA】ファイル開閉時の...
-
ftpコマンドを実行すると「425 ...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
binファイルを解凍したいの...
-
一定のファイル数ごとにフォル...
-
バッチファイル 特定ウインドウ...
-
コマンドプロンプトの「%1」と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ終了時にDOS窓を閉じるコ...
-
バッチファイル 文字列にスペ...
-
コマンドプロンプトをクリック...
-
ftpコマンドを実行すると「425 ...
-
make test って何をするための...
-
シェルの「:コマンドが見つか...
-
findstrでヒットした1行前の文...
-
バッチファイルを使ってテキス...
-
コマンドプロンプトで、特定の...
-
ショートカットをデスクトップ...
-
2つ目の「pause」は無効?
-
コマンドプロンプトを最小化し...
-
SSH接続でwindowsサーバのコマ...
-
コマンドプロンプトでファイル...
-
コンピュータ名をファイル名に...
-
AccessVBAで実行時間を指定する...
-
コマンドプロンプトのバッチで...
-
シェルからpsqlコマンドでトラ...
-
xCopyコマンドでネットワークご...
-
コマンドプロンプトのFTPコマン...
おすすめ情報