gnuplotの使い方

大学でgnuplotを使ってグラフを作成する機会があったので、自分用に基本的なgnuplotの使い方をメモっておいたほうがいいと思ったので記録します。

## gnuplotとは？

gnuplotは、2次元もしくは3次元のグラフを作成するためのアプリケーションソフトウェアである。よく大学のレポートで使われている。


## gnuplotのインストール

gnuplotはWindows,Mac,Linuxなどで使うことができる。
下記のサイトが参考になるので一応、載せておきます。

- [Windowsでのgnuplotのインストール](http://www.ss.scphys.kyoto-u.ac.jp/person/yonezawa/contents/program/gnuplot/instraction_win-wizerd.html)
- [Macでのgnuplotのインストール](https://qiita.com/noanoa07/items/a20dccff0902947d3e0c)
- [Linuxでのgnuplotのインストール](https://qiita.com/python_walker/items/0307cda7299608c6bb21)

## gnuplotで簡単なグラフを作ってみる

### gnuplotを起動させる

```
sugiyoshi% gnuplot                                     

	G N U P L O T
	Version 5.2 patchlevel 6    last modified 2019-01-01

	Copyright (C) 1986-1993, 1998, 2004, 2007-2018
	Thomas Williams, Colin Kelley and many others

	gnuplot home:     http://www.gnuplot.info
	faq, bugs, etc:   type "help FAQ"
	immediate help:   type "help"  (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot>
```
起動している間はずっと`gnuplot>`が先頭に表示される。


### 関数からグラフを作る

まず`y=8x+5`を表示してみる。

```
gnuplot> plot x*8+5
```
このように入力すると下のようにグラフが作られる。

<img width="754" alt="gnu1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/d8429575-bf08-0ce4-dcc2-6caec9828780.png">


### x軸、y軸の範囲を指定する

x軸の範囲を指定したい時は`set xrange [x1:x2]`
y軸の範囲を指定したい時は`set yrange [y1:y2]`をそれぞれ使う

`replot`はグラフの設定を変える時に使用する。

```
gnuplot> set xrange [-5:5]
gnuplot> set yrange [-10:20]
gnuplot> replot
```

そして、できたグラフがこちらです。

<img width="754" alt="gnu2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/1f89f5dd-1bbe-fd17-ee82-6c2876605468.png">


### x軸、y軸に名前をつけ、グラフ自体にタイトルを付けて、格子線を設定する
x軸の範囲を指定したい時は`set xlabel '名前'`、　
y軸の範囲を指定したい時は`set ylabel '名前'`、
グラフ自体にタイトルを付ける場合は`set title "タイトル"`
格子線を設定するには`set grid`を使う。


```
gnuplot> set xlabel 'x軸でーす'
gnuplot> set ylabel 'y軸ンゴ'
gnuplot> set title "これがタイトルです"
gnuplot> set grid
gnuplot> replot
```
出来上がったグラフはこちらです。

<img width="754" alt="gnu3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/fa5f4568-cd84-f528-3f85-c63eea68f619.png">


### 最後に格子線を設定し、pngで画像を保存する

pngで保存したい時は`set terminal png`
保存先を指定する`set output "名前.png"`
gnuplotを終了させるには`exit`を使う。

```
gnuplot> set terminal png
gnuplot> set output "gnuplot.png"
gnuplot> replot
gnuplot> exit
sugiyoshi%
```
これで終わりです。
日本語に対応してないと、日本語がうまく画像に表示されないので注意してください！！！

## gnuplotでファイルからデータを読み込んでグラフ2つを表示する

次はファイルからデータを読み込んでグラフを表示するという少し実践的なことをします。

### ファイルを作成する
まず、このように`BandWidth.txt`というファイルを作成します。
その時に注意してもらいたいのですが、数値と数値の間は必ず空白を1つ以上開けてください。

```text:BandWidth.txt
#Time  1MByte 10MByte
0.0~1.0  16.777 83.886
1.0~2.0  16.777   0.000
2.0~3.0   8.389   0.000
3.0~4.0  25.166   0.000
4.0~5.0  16.777   0.000
5.0~6.0  16.777   0.000
6.0~7.0  25.166   0.000
7.0~8.0  16.777   0.000
8.0~9.0  16.777   0.000
9.0~10.0 25.166  83.886

```

### ファイルから値を取ってきてグラフに挿入する
 
`plot "ファイル名" using 1:2 w lp title "1つ目のグラフの名前"`
`replot "ファイル名" using 1:3 w lp title "２つ目のグラフの名前"`

この時の`using 1:2`はファイルの１行目をx軸の値とし、ファイルの2行目をy軸の値とするという意味である。

```
gnuplot> plot "BandWidth.txt" using 1:2 w lp title "1MByte"
gnuplot> replot "BandWidth.txt" using 1:3 w lp title "10MByte"
```
<img width="754" alt="スクリーンショット 2019-04-29 19.05.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/dff6d039-8aef-4748-ae64-cf3eb30b0a0a.png">


### 簡単な設定を入れる

上の方で説明したので、省略する。

```
gnuplot> set xlabel 'Time(s)'
gnuplot> set ylabel 'Throughput(Mbps)'
gnuplot> set xrange [0:9]
gnuplot> set yrange [0:100]
gnuplot> set grid
```
<img width="754" alt="wfdsfaf.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/548d4ede-537c-0a6d-b872-782189d3cf91.png">


### x軸の値を変更する

x軸の値に文字列を入れる時は
`set xtics ('文字列' x軸の値, '文字列' x軸の値',………,文字列' x軸の値)`を使う。

```
gnuplot> set xtics ('0.0∼1.0' 0, '1.0∼2.0' 1, '2.0∼3.0' 2, '3.0∼4.0' 3,'4.0∼5.0' 4,'5.0∼6.0' 5,'6.0∼7.0' 6,'7.0∼8.0' 7,'8.0∼9.0' 8,'9.0∼10.0' 9)
```

<img width="754" alt="スクリーンショット 2019-04-29 19.08.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407128/002f67e5-69c5-5638-030a-8365c854a348.png">

### 保存する
これも上の方で説明したので省く。

```
gnuplot> set terminal png
gnuplot> set output "BandWidth.png"
gnuplot> replot
```

終了ですね。

お疲れ様でした。