目的
タイトルにもあるようにpyplotで結果を描画する際に、ほぼ毎回調べてしまっているがそろそろ卒業したいと思い基礎から勉強したのでアウトプットとしてまとめる。
余談
最近、研究室の課題としてNLP100本ノックに取り組んでいるのですが、第8章のニューラルネットワークでエポックごとに損失と正解率がどのように変化するか描画するのですがその時に調べながらやっていたらpytorch使えるようになったのにpyplotですら毎回調べてやっている自分が恥ずかしくなったため改めて勉強しようと思いました。
準備
今回Pythonを利用していくが、まずmatplotlibをインストールしていない人は下記コードの実行が必要である。
pip install matplotlib
またimportは多くの場合以下のようにすることが多い。コードを見ているとpltを目にすることが多いだろう。
from matplotlib import pyplot as plt
解説
グラフが1つのとき
Code
from matplotlib import pyplot as plt
import random
import numpy as np
x = np.arange(0, 100, 2)
y = np.array([random.randint(0,100) for _ in range(50)])
y = np.random.randint(0, 100, 50)
plt.plot(x, y)
plt.title('Random plot')
plt.xlabel('X')
plt.ylabel('Y')
plt.savefig('out/random_plot.png')
Output

※Codeにてyを2種類書いているのはただの気分
以上のコードが基礎中の基礎になるのだろう。さらにカスタマイズについて学ぶために以下のようにコードを改変した。
Code
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0.0, 10.0, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='sin(x)', color='gray', linestyle='--', linewidth=2, marker='o', markersize=5)
plt.plot(x, y2, label='cos(x)', color='green', linestyle='-.', linewidth=2, marker='D', markersize=5)
plt.legend()
plt.title("To study custom plot")
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.savefig("out/custom_plot.png")
Output

非常に見栄えが悪いのは置いておいて、カスタマイズすることができている。
pyplot.plotで指定できる主なパラメータについて以下にまとめる。
パラメーター | 説明 | 種類 |
---|---|---|
color | 線の色を変更 | green, blue, #FF00FF |
linestyle | 線の種類を変更 | -, --, -., : |
linewidth | 線の幅を調整 | 2, 0.5, 1(数値) |
marker | マーカーのスタイルを変更 | o(円),D(菱形),s(四角),^(上三角) |
markersize | マーカーの大きさを変更 | 2, 0.5, 5(数値) |
その他調整可能なパラメーターについては公式ドキュメント等を見ると良いだろう。
また描画において重要な関数も以下にまとめる。
関数 | 説明 | 引数 |
---|---|---|
grid() | グリッドを表示 | True or False |
legend() | 凡例(plot関数で指定したlabel) を表示 | True or False |
title("title") | グラフのタイトルを指定・表示 | 任意の文字列 |
xlabel("xlabel") | x軸のラベルを指定・表示 | 任意の文字列 |
ylabel("ylabel") | y軸のラベルを指定・表示 | 任意の文字列 |
xlim(min, max) | x軸の範囲を指定 | (例) min=1, max=5 |
ylim(min, max) | y軸の範囲を指定 | (例) min=-5, max=5 |
show() | グラフを表示させる | ほどんど必要ない |
savefig("graph.png") | グラフを任意のファイル名で保存 | 任意の文字列 |
以上の関数を利用すればほどんどのカスタマイズが可能である。ただし関数の利用には
plt.legend()
のようにモジュールの指定が常に必要である。
※どうしてもモジュール指定したくないときはインポートの際に
from matplotlib.pyplot import *
とすれば
plot(x, y)
legend()
title("To study plot")
xlabel("x")
ylabel("y")
show()
のように、簡潔に書くこともできる。