つれづれなる備忘録

日々の発見をあるがままに綴る

gnuplotによるグラフ作成8~ファイルデータ読み込み

 今回は実験データなどデータファイルからデータを読み込んでプロットする方法について紹介する。

1. 読み込みファイルの書式

 まず、gnuplotで読み込むためのデータの書式は例えばdata.txtの中身は以下のようなものになる。

#X Y Y2
0 1 6
2 5 10
6 8 15
8 15 18
10 22 30
15 50 40

読み込めるデータは数値で、文字は読み込めない。ただし#を入れるとコメントアウトとなるため、上記の例では1行目に#を入れてデータ列名を表記している。 また、データ列が複数ある場合は、データ間にスペースを設けることが必要となる。上の例では、1列目をX軸, 2列目をY軸, 3列目をY2軸とする。 書式のルールを守っていれば、拡張子については特に制限がないが、通常は.txt.datなどが使われることが多いと思う。

2. ファイルデータ読み込みとプロット

 ファイルデータを読み込んでプロットするには、plot 'ファイル名'とする。例えば

plot 'data.txt'

ファイルがgnuplotのカレントディレクトリにない場合は、ファイル名は'c:\data\data.txt'のようにフルパスで指定すればよい。 実行結果を以下に示す。

データプロット
データプロット

X軸とY軸の2次元XYプロットが得られるが、Y2軸に対しては何もプロットされない。どの列のデータをプロットするか指定するにはplot 'ファイル名' using n:mを用いる。nはXYプロットのX軸にあたる列番号、mはY軸にあたる列番号となる。

plot 'data.txt' using 1:3

実行結果を以下に示すが、1列目がX、3列目がYの2次元XYプロットが得られる。

3列目を選択したデータプロット
3列目を選択したデータプロット

1列目と2列目、1列目と3列目を複数プロットしたい場合は、関数をプロットする場合と同様に

plot 'data.txt', 'data.txt' using 1:3

なお、1列目と2列目を指定するusing 1:2に関しては省略できる。(1列目と2列目以外でプロットする場合は、usingで指定する必要あり)実行結果を下に示す。

複数データプロット
複数データプロット

また、XYプロットではなく単に1列目、2列目、3列目のデータを並べてプロットしたい場合はusing mとしてmはプロットする列番号で指定する。例えば

plot 'data.txt' using 1, 'data.txt' using 2,'data.txt' using 3

下のように列目、2列目、3列目のデータを並べてプロットされ、x軸はデータの行番号に対応する。

データ並べてプロット
データ並べてプロット

3. csvファイルの読み込みとプロット

 csvファイルもデータファイルとしてよく利用される。csvファイルはデータ間がカンマ,で区切られており、例えば適当に作成したtest.csvの中身は以下のようになっている。

1,1
2,4
3,9
4,16
5,25

 読み込みファイルの書式として、データ間にスペースを入っていることが必要としていたが、区切りをスペースからカンマに変更することでcsvファイルのデータも読み込んでプロットすることができる。 区切りをカンマに変更するにはset datafile separator ","とする。上のtest.csvをプロットするには以下のようにする。

set datafile separator ","
plot 'test.csv'

以下のようにcsvファイルのデータもプロットすることができるようになる。なお、今度はデータファイルの書式がカンマ区切りになっているので、もとのseparatorをスペース" "に戻すか、あるいは" ,"とするとスペースとカンマ同時に指定できるようである。 gnuplot は異なる複数の separator (データ区切り) を同時に使える | ゴルディアスの涙目

csvファイルデータプロット
csvファイルデータプロット

4. まとめ

今回はデータファイルからデータを読み込む方法として、スペース区切りのテキストファイル、カンマ区切りのcsvファイルのデータをプロットする方法について紹介した。