GNUPLOTでのGIFグラフ出力

このQ&Aのポイント
  • GNUPLOTを使ってテキストファイルからデータを読み込み、折れ線グラフのGIF画像を出力する方法について教えてください。
  • GNUPLOTを使用してテキストファイルから来場者数のデータを読み込み、年月をx軸、人数をy軸とした折れ線グラフのGIF画像を生成する方法についてご教示ください。
  • GNUPLOTを利用して、テキストファイルに保存されているデータを読み込み、年月をx軸に、来場者数をy軸にした折れ線グラフのGIF画像を作成する方法について教えてください。
回答を見る
  • ベストアンサー

GNUPLOTでのGIFグラフ出力

ここに質問するのは間違っているように思えますが、 プログラマの方だと誰かしらこれと同じ事をやったことがあるのではないかと思い、ここに質問させていただきます。 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軸に人数というように折れ線グラフにして出力させたいのですがどうしたら良いものでしょうか? コマンド一つ一つ教えていただけると非常にありがたいです。 どうか宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • oodaiko
  • ベストアンサー率67% (126/186)
回答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/gnuplot/ http://www.linux.or.jp/JF/JFdocs/gnuplot.html http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplot/gnuplot.html http://infofarm.affrc.go.jp/~kadosawa/gnuplot.htm http://www.nucl.phys.tohoku.ac.jp/~m_isihar/text/gnuplot.howto.html

参考URL:
http://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/,http://ayapin.film.s.dendai.ac.jp/~matuda/Gnuplot/gnuplot.html
bridge
質問者

お礼

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

関連するQ&A

  • gnuplotでグラフの出力

    gnuplotで以下のファイルを可視化したいのですが。 出力ファイルに 0.0 10E-9 1.0 10E-9 2.0 9E-9 .... ..... ..... ...... ..... ...... 10.0 ....... 12.0 ....... 15.0 ....... ..... ...... 170.0 ........ 180.0 ...... のような2列のデータがあります。 1列目をx軸、2列目をy軸として2次元のグラフを描きたいのですが どのようにすればできるでしょうか? どなたかご存知の方よろしくお願いします。

  • gnuplotでのグラフの作り方について教えてください。

    gnuplotで、例えば 100 200 300 400 600 500 200 100 800 400 200 500 というテキストファイルがあります。 これをグラフにしたいのですが、 X軸をこの行の数を取り入れたいのですが どうすればいいのでしょうか? やはり、一列目に 1 2 3 と入れなければいけないのでしょうか? わかりにくいかもしれませんが 補足はしますので、ご指導おねがいします。

  • グラフ描画コンテンツのgnuplotの使い方について質問します。

    グラフ描画コンテンツのgnuplotの使い方について質問します。 グラフを書く際に、範囲を分けて書きたいのですがどのようにすればいいのでしょう? 具体的に言いますと、F(x)=x のグラフを x軸 -5から0までの範囲、g(x)=x*xのグラフを x軸 0から3までの範囲で描写したいときに、どう打ち込めばよいのでしょうか?

  • エクセルで3軸のグラフを作りたい!!

    エクセルで今2軸のグラフがあります。 例えば、                  1月 2月 3月 合計価格 (多くの商品を集計した結果)    6万 2万 10万 購入者数             5人 15人  1人 必ずしも 購入者の数と合計金額はひれいしていませんが、 これで棒グラフと折れ線を作っています。 それに加えて、 このショップに来た来場者数も入れようとしています。 (購入したしないに関わらない。)これを折れ線グラフで入れようと 考えているのですが、これを作るエクセル技術がありません。 積み重ね棒グラフなどいろいろ試したのですが・・・・ みなさんの解答をみていると3軸はむつかしいとのこと。 何か、簡単にできるやり方ご存知の方いらっしゃったら 伺いたいです。よろしくおねがいします。

  • gnuplotの出力グラフ名を外部で書き換えたい

    LINUX上のCからgnuplotを用い、適当なデータを作成し、グラフを1枚作成することに成功しました。今後はループ処理によって、データ名とグラフ名を替えながら大量のデータ処理をするつもりです。 gnuplotに送りこむデータ名の変更の仕方、グラフ名の変更の仕方を教えてください。 'out.data','out.png'を書き換える方法です。例えば’out1.data'から'out1000.data'。'out1.png'から'out1000data'のようにできれば、1000個のデータを処理し1000枚のグラフを作成できます。 下記に適当なグラフを出力するプログラム例を示します。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void){ FILE *data, *gp char *data_file; int i; double x,y; //make data file data_file="out.data"; data = fopen(data_file,"w"); for(i=0;i<=5;i++){ x=i; x=i*i; fprintf(data,"%f\t%f\n",x,y); } fclose(data); //make graph gp=popen("gnuplot -persist","w"); fprintf(gp,"set terminal png\n"); fprintf(gp,"set xrange [0:5]\n"); fprintf(gp,"set yrange [0:50]\n") fprintf(gp,"set output 'out.png'\n"); fprintf(gp,"plot \"%s\"with lines linetype 1 \n", data_file); pclose(gp); return(gp); return 0; }

  • gnuplot で出力した eps ファイルを編集する描画ソフト

    「gnuplot で出力した eps ファイル」を描画ツールで編集したいのですが、良い描画ソフトはないでしょうか?(矢印を描いたり、注目すべき場所を円で囲ったり・・・) Windows で Excel で作ったグラフは、Excelの描画ツールで直接書き込めますが、gnuplot のグラフではどうするのかと思いました。

  • 積み上げ棒グラフと折れ線グラフについて

    前期対比ができる「積み上げ棒グラフと折れ線グラフをミックスしたグラフ」を作成したいのですがうまくできません。x軸は「月」Y軸は「金額」、棒グラフは「原価」の積み上げ、折れ線グラフは「売上高」です。例えばx軸「4月」に前期と当期の積み上げ棒グラフを2本並べ、それぞれの棒グラフ上に前期と当期の売上高の折れ線グラフを持ってきたいのです。うまくできないのは(1)棒グラフの4月と5月の間隔を空ける(2)折れ線グラフを前期(当期)のみを繋げるという2点です。 現在は、棒グラフについては前期当期のメリハリなく等間隔で並んでいます。折れ線グラフは、x軸位置を棒グラフに合わせるため、空白セルをそれぞれに挟んだのですが空白をプロットできず、ジグザグになっています。

  • グラフのことで

    こんにちは、グラフのことで、またお世話になります。 ウインドウズビスタ Excel2007です。 一つ目  下記のような縦棒グラフがあります。    50    40    30    20    10     1年目 2 3 4 5    縦(値)軸の50の付近に (%)を表示したいのですが、入力の仕方がわかりません。 ・二つ目  下記のデータにマイナスの値があるので、折れ線グラフにしたとき、    横(項目)軸に、折れ線がかぶるんですが、かぶらない様にするには、どうしたらよいのですか。    6000    4000    2000     0   -2000       1月 2月 3月 4月 5月   よろしくお願いします。      

  • Excel グラフ貼り付時データ表示が変わる

    こんにちは。 Excel2003で表とそのグラフを作成しました。 表は年月と数値(小数点1位で丸める)の簡単な物です。(下記) 2011年1月---21.5 2011年2月---22.1 グラフは1軸の折れ線グラフにオプションでデーターテーブルを つけいています。 この表を別のブックに貼り付けると年月が数字に化けて 40544の様になります。 また数値も21.45235のように丸めた数字ではなく生の値になります どのようにしたら上記の不具合が直せるでしょうか? ご存じの方お教えください。 よろしくお願いいたします。

  • エクセルの複合グラフで

    棒グラフと折れ線グラフの複合グラフを作成中です。 X軸を第1軸は3ヵ月ごとの折れ線グラフ、第2軸を1年ごとの棒グラフにしたいのですがどのように作成すれば宜しいでしょうか。 どうぞお知恵をお貸しください。 宜しくお願いします。

専門家に質問してみよう