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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA グラフX軸の変更

A列:X軸(日付)
H列:Y軸(値)
といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか?
現在は以下のようなソースまで組めます。
あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。
---------------------------------------------------------------
Dim chart1 As Chart
Set chart1 = Charts.Add
'H列グラフ化
chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
chart1.ChartType = xlLineStacked
chart1.HasLegend = False
---------------------------------------------------------------

どなたかアドバイスいただければ幸いです。

A列:X軸(日付)
H列:Y軸(値)
といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか?
現在は以下のようなソースまで組めます。
あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。
---------------------------------------------------------------
Dim chart1 As Chart
Set chart1 = Charts.Add
'H列グラフ化
chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
chart1.Ch...続きを読む

Aベストアンサー

>あとは、A列の日付をX軸に設定するだけ...
この手作業を[マクロの記録]すればある程度は判ります。
>chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
これを

With Worksheets("Sheet1")
  chart1.SetSourceData .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
  chart1.SeriesCollection(1).XValues = .Range(.Cells(ROWINI, 1), .Cells(iend, 1))
End With

こんな感じに変更すれば良いです。
.Cells(ROWINI, COLRUI)が項目名だったら、.Cells(ROWINI, 1)は.Cells(ROWINI + 1, 1)としたほうが良いかも。

もしくは、最初にグラフ元範囲をRange型変数にSetします。

Dim rng As Range
With Worksheets("Sheet1")
  With .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
    Set rng = Union(.Cells, .Offset(, -7))
  End With
End With
With Charts.Add
  .ChartType = xlLineStacked
  .SetSourceData rng
  .HasLegend = False
End With
Set rng = Nothing

こんな感じ。

>あとは、A列の日付をX軸に設定するだけ...
この手作業を[マクロの記録]すればある程度は判ります。
>chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI))
これを

With Worksheets("Sheet1")
  chart1.SetSourceData .Range(.Cells(ROWINI, COLRUI), .Cells(iend, COLRUI))
  chart1.SeriesCollection(1).XValues = .Range(.Cells(ROWINI, 1), .Cells(iend, 1))
End With

こんな感じに変更すれば良いです。
.Cells(ROWINI, COLRUI)が項目名だったら、...続きを読む

QMATLABのグラフで軸目盛りのフォントサイズを大きくする方法?

MATLABのplotグラフで、
xlabel、ylabel、titleなどは、
FontSizeプロパティの指定により、
サイズを簡単に変更できるのですが、

軸の目盛りのフォントサイズを変更する方法が分からず
困っています。どなたか、キーワード、参考URLなど
ご教示頂ければありがたいです。よろしくお願いします。

Aベストアンサー

set(gca,’FontSize’,14);
とかすれば、よいのでは。
いま、matlabを使える環境にないので、もしかしたら間違っているかもしれませんが。

get(gcf)
とか、すれば、図のプロパティ一覧が得られます。
get(gca)
とかやると、軸のプロパティ一覧が得られます。
それっぽいやつを、set()で変更すればよいです。

Q点と折れ線との間の距離を求める

 点と折れ線との間の最短距離を求めたいのですが、そういうライブラリ(できればソースの読めるもの)やアルゴリズムなど何処かにないでしょうか?

Aベストアンサー

線分と直線の違いは数学的には結構本質.
(0,0)と(1,0)を両端とする線分Lとx軸と
点A(2,0)を考える.
さて,AからLまでの距離,Aからx軸までの距離
どう考えます?

線分を相手にするときには「直線相手の公式」は使えないから
もっと根本にもどって,AからL上の点まで「距離」の中から
最小の値をとる点を探すことになります.

(a,b),(c,d)を両端とする線分上の任意の点(x,y)は
(x,y)=(1-t)(a,b)+t(c,d) (0<=t<=1)で表せる.
今点(A,B)をとって(A,B)からその線分の点までの距離d(t)を考えると
d(t)^2 = ((1-t)a+tc-A)^2 + ((1-t)b+td-B)^2だから
これの最小値を求めればよい.
ただし「0<=t<=1」で.これがめんどくさい.
#数学的には高校一年生程度の問題だが計算が面倒

じゃどうするか.今度は
(a,b),(c,d)を両端とする「直線」を相手にして
一度,その直線まで(A,B)から垂線を下ろし,その垂線の足をHとする.
Hが線分上にあれば(A,B)とHまでの距離が線分までの距離
Hが線分上になければ,
・Hを(1-t)(a,b)+t(c,d)の表記で書いたときに t>1であれば(A,B)と(c,d)の距離が求める距離
・t<0であれば(A,B)と(a,b)の距離が求める距離
くらいの手数になるか.

>その点が移動するたびに最短距離を計算しなければならない場合に、再計算の大半が無駄な計算をしているような気がしたということです。

さて。。なぜ無駄と思います?
点を移動したら当然値が変わるのだから再計算は必要です.
どこまで「正確さ」を求めるか,計算コストなどとの
トレードオフも当然あります.
その移動量や線分の形態などいろいろな条件があります.
もちろんいくつかの「節約方法」はあります.

・「解像度」を粗く考える方法
本来ならば1ピクセル単位で考えるのを例えば,16x16ピクセル
(これはわざと大きくしてますよ,念のため)を
一点だと思って,その範囲でのマウス移動は無視する

・各点ごとの結果をキャッシュしておく.
同じ点の値を複数回計算しないように
一度計算したらその値を保存しておき,
二回目以降は同じ計算をしない
折れ線も変化するならば折れ線の情報も考慮しないと当然だめ

・折れ線を構成する各線分の位置関係を考慮しておき,
ある点からの距離が分かり,
移動した後の点がそれほど離れていないならば
遠くの線分を再計算対象には含めない

これくらいの工夫は考慮すべきでしょう.

線分と直線の違いは数学的には結構本質.
(0,0)と(1,0)を両端とする線分Lとx軸と
点A(2,0)を考える.
さて,AからLまでの距離,Aからx軸までの距離
どう考えます?

線分を相手にするときには「直線相手の公式」は使えないから
もっと根本にもどって,AからL上の点まで「距離」の中から
最小の値をとる点を探すことになります.

(a,b),(c,d)を両端とする線分上の任意の点(x,y)は
(x,y)=(1-t)(a,b)+t(c,d) (0<=t<=1)で表せる.
今点(A,B)をとって(A,B)からその線分の点までの距離d(t)を考えると
d(t)...続きを読む

Qエクセル、グラフの書き方、軸割り当て

お願いします

エクセルのグラフをやり始めましたが基本がわかりません

添付しますが、
A列を横軸、B列を縦軸のデータにしたい

グラフを書くと、B列はできました
しかし、A列は、別のグラフになってしまいました

(1,100)
(2,120)
(5,130)
(10,200)
...
とそれらの点をグラフにしたいのですがどうすればいいのでしょうか?

Aベストアンサー

http://office.microsoft.com/ja-jp/excel-help/HA001054840.aspx

Qgnuplotで3次元の円

gnuplotで3次元の円の書き方がわかりません。
出来ればプログラムを教えてください!

Aベストアンサー

こうするとだいぶ球らしく見えます。
gnuplot> set parametric
gnuplot> set size square
gnuplot> set ticslevel 0
gnuplot> splot sin(u)*cos(v) , sin(u)*sin(v) , cos(u)

式は球座標によるものです。
http://ja.wikipedia.org/wiki/%E6%A5%B5%E5%BA%A7%E6%A8%99%E7%B3%BB
上のURLを見てもらえばわかりますが、
x = r sin(θ) cos(Φ)
y = r sin(θ) sin(Φ)
z = r cos(θ)
となっています。
r=1と仮定し、θ=u , Φ=v に置き換えたものがgnuplotに与えた式です。


人気Q&Aランキング

おすすめ情報