# グラフをもうちょっとマシにする

## インタラクティブなグラフにする

jupyterlabそのままでは、グラフを扱う能力が貧弱なため、ipympl（別名jupyter-matplotlib）というパッケージを使います。このパッケージはすでにインストールが済んでいるはずです。

まず、jupyter上で、何か新しくnotebookを開いた直後に**必ず最初に一度だけ**

```
%matplotlib widget
```

を実行してください。これはipymplの機能を利用するためのマジックコマンドです。このコマンド実行以後に、グラフを作ると、グラフの拡大縮小や移動などをインタラクティブに行うことができます。

違うnotebookを開いたときには、やはり、そのnotebook上で、一度だけ上記のコマンドを実行してください。逆に、同じnotebook上で二度以上、上記のコマンドを実行してしまうと、それまでに描画したグラフはリセットされるので、注意しましょう。

また、notebook上の画像は、一度notebookを閉じると、リセットされてしまいます。重要なグラフは画像ファイルとして保存しておきましょう。特に計算時間がかかるような解析を行った場合は、リセットされてしまうと、同じ時間が必要になります。大変な事にならないよう、

* 解析結果そのものをasciiやバイナリデータファイルとして保存しておく
* グラフを画像ファイルとして保存しておく（ただし、グラフの見た目&#x306F;***必ず***&#x3042;とから修正したくなるものです。解析に時間がかかるのならばデータも保存しておいた方が賢明です）

といったことを心がけましょう。

## デフォルトの見た目を変える

matplotlibで提供されるデフォルトのグラフの見た目は、あまりパットせず、論文や研究発表には使いにくい見た目をしています。実際、どのような形式が適切化は、用途・分野・文脈によって異なるものですが、逆にいえば、一人の人間が作業する限りは、「適切なグラフの見た目」というのは、あまり変わらないものです。グラフの見た目のうち、フォントのサイズやラベルの相対的な位置など、基本的なものは、最初に統一的な設定してしまいましょう。そのためにはrcParamasという変数の中身を調整していきます。例えばnotebookの最初で

```
%matplotlib widget
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
plt.rcParams['font.size'] = 16
plt.rcParams['xtick.major.pad'] = 8
plt.rcParams['ytick.major.pad'] = 8
plt.rcParams['figure.autolayout']= True
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.top'] = True
plt.rcParams['ytick.right'] = True
```

のように、デフォルトのグラフの見た目を設定してしまいましょう。これで、このノートブック中で作られるグラフはすべてこの設定が適用されます。5行目から順番に、

* フォントサイズを16に指定
* 横軸のラベルの相対位置調整
* 縦軸のラベルの相対位置調整
* 各グラフのラベルなどが重ならないように、各種パラメータを自動調整する
* 横軸の目盛りを内向きにする
* 縦軸の目盛りを内向きにする
* 上にも目盛りを付ける
* 右にも目盛りを付ける

ことに対応しています。

matplotlibのもともとのグラフの見た目と比べると

![matplotlibのもともとのスタイル](https://1559620454-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEGDe0jc4Gum8QxA8RN%2F-MK-1c6wrQ49pSRr7Wm3%2F-MK-9XBwgCgarZWE7FZz%2FFigure%201\(16\).png?alt=media\&token=cdbbe42c-ded3-4cd9-b1a3-f00760dcfd8a)

![調整後のスタイル](https://1559620454-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEGDe0jc4Gum8QxA8RN%2F-MK044JRrgQXFIs_YyOo%2F-MK04F01Mva9BPgDsvV0%2FFigure%201\(18\).png?alt=media\&token=5d3fe0a1-4d66-40e2-a112-ee0407183dca)

多少改善されたと思います。あとは、自分の好みや、よく論文投稿するジャーナルの要請に従って最適な見た目に予め調整しておきましょう。

## グラフに関する細かいテクニック

グラフに関する、よく使いそうなテクニックをまとめました。必要に応じて参照してください。

### 特定の図の見た目のみ変更

すべての図について共通して見た目を変更する方法はすでに紹介しましたが、特定のグラフだけ見た目を変更することもできます。

例えばaxes領域にアクセスすることで

```
ax.set_xlabel("test (μs)", fontsize=20)
```

のようにx軸のラベルのフォントサイズを変更したり

```
ax.tick_params(axis='x', labelsize=8)
```

のようにx軸の目盛りの数字のフォントサイズを変更したりできます。たとえば

```
fig1, ax1 = plt.subplots()

curve1 = ax1.plot(t,x, marker='o',c='b')
ax1.set_xlabel("time (s)",fontsize=20)
ax1.set_ylabel("position (m)")
ax1.tick_params(axis='x', labelsize=8)
```

を一度に同じセル内で実行するというような使い方です。

### 数値でプロット範囲を指定

```
ax.set_xlim(0, 8)
ax.set_ylim(1,3)
```

のようにaxes領域にアクセスすることで、グラフの範囲を指定することができます。

### 高解像度の画像を作りたい

plt.subplots() のオプションdpiを使います。数値が大きいほど解像度が高いです。デフォルトでは100です。場合によりますが400もあれば十分でしょう。

```
fig, ax = plt.subplots(dpi=400) 
```

### &#x20;凡例（legend, ラベル）をつけたい

ax.plot実行時にオプションを付けておきます。

```
curve1 = ax.plot(xdata,my1Ddata,marker='o',c='b',label='label example')
```

その上で、

```
ax.legend(loc='upper left') # legend をupper leftに置きたいとき
```

と実行すると、

![図似凡例をつける](https://1559620454-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEGDe0jc4Gum8QxA8RN%2F-MOdSbEIifU-1PEtSpHO%2F-MOdTd0Tc96frZ8UepZq%2FFigure%201\(13\).png?alt=media\&token=ab3ce9b9-3b93-47bc-8dfd-2f29eac0dcc1)

のように凡例が表示されます。

### 対数プロットしたい

上述のグラフを作るための基本的なコードを実行したあとで、

```
ax.set_yscale("log")
```

を実行すれば、片対数プロットができます。線形に戻したいときは

```
ax.set_yscale('linear')
```

と実行しましょう。

### 数式やギリシャ文字を使いたい

軸ラベルなどで、例えば

```
ax.set_xlabel(r"$\alpha$")
```

のようにr"$$"という表記を使うと$と$の間にlatexの表現を使うことができます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://minowa.gitbook.io/python/gurafuwomouchottomashinisuru.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
