- Home
- Docs
- Python
- matplotlib
matplotlibの基本的な使い方
更新日: 2022-11-20
matplotlibでグラフを作成するとき、下記2つの要素を考える必要がある。
- figure
正確には異なるが、一つのウィンドウと考えて問題ない。1つのグラフではないことに注意。
- axes
そのまま読めば軸であるが、グラフの軸を指しているわけではない。1つのグラフだと考えてよい。よくaxと省略される。figureの中にaxesを配置していくイメージでfigureを作る。
というわけでグラフを表示してみる。
1
2
3
4
5
|
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
|
一つのwindowsに2つ以上表示させる場合はadd_subplot(N, M, n)
を使用する。Nは横方向の数、Mは縦方向の数を表し、nは何番目のグラフかを示す。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax1.set_title('1')
ax2 = fig.add_subplot(2, 2, 2)
ax2.set_title('2')
ax3 = fig.add_subplot(2, 2, 3)
ax3.set_title('3')
ax4 = fig.add_subplot(2, 2, 4)
ax4.set_title('4')
plt.show()
|
日本語化
#
デフォルトではラベル等に日本語が使えない。設定ファイルを書き換えてしまうのが簡単だが、移植性が低くなる。そこでスクリプトの最初でフォントを変更する。
1
2
3
|
from matplotlib import rcParams
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['BIZ UDPGpthic', 'Yu Gothic', 'Meirio']
|
プロットサンプル
#
グラフには下記のようなものがある。
記述 |
グラフ種類 |
Axes.plot() |
折れ線グラフ |
Axes.scatter() |
散布図 |
Axes.bar() |
縦棒グラフ |
Axes.barh() |
横棒グラフ |
Axes.hist() |
ヒストグラム |
Axes.boxplot() |
ボックスプロット |
Axes.violinplot() |
バイオリンプロット |
Axes.contour() |
コンタープロット |
Axes.pcolor() |
ヒートマップ |
Axes.imshow() |
画像 |
Axes.axhline() |
水平線 |
Axes.axvline() |
垂直線 |
よく使うものを例示する。
折れ線グラフ
1
2
3
4
5
6
7
8
9
10
11
|
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = x + np.random.randn(100)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, label="plot(), 折れ線")
plt.legend()
plt.show()
|
散布図
1
2
3
4
5
6
7
8
|
x = np.linspace(0, 10, 100)
y = x + np.random.randn(100)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, label="scatter(), 散布図")
plt.legend()
plt.show()
|
縦棒グラフ
1
2
3
4
5
6
7
8
|
x = np.linspace(0, 9, 10)
y = np.random.rand(10)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x, y, label="var(), 縦棒グラフ")
plt.legend()
plt.show()
|
横棒グラフ
1
2
3
4
5
6
7
8
|
x = np.linspace(0, 9, 10)
y = np.random.rand(10)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.barh(x, y, label="varh(), 横棒グラフ")
plt.legend()
plt.show()
|
ヒストグラム
option |
説明 |
bins |
階級数 |
density |
密度に変換するか否か(True or False) |
1
2
3
4
5
6
|
x = np.random.randn(1000)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(x,bins=10, density=True, label="hist(), ヒストグラム")
plt.legend()
plt.show()
|
ボックスプロット
1
2
3
4
5
|
x = np.random.randn(1000)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot(x)
plt.show()
|
グラフの調整
#
軸の設定
Axes.set() |
内容 |
title |
タイトル設定 |
xlabel |
x軸のラベル名 |
ylabel |
y軸のラベル名 |
xlim |
x軸の範囲 |
ymil |
y軸の範囲 |
グリッドの設定
Axes.grid() |
内容 |
which |
“major”, “minor”, “both” |
axis |
“both”, “X”, “Y” |
1
2
3
4
5
6
7
8
9
|
x = np.linspace(0, 10, 100)
y = x + np.random.randn(100)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, label="サンプル")
ax.set(xlim=[0, 8], ylim=[0, 10], xlabel="X", ylabel="Y", title="sample graph")
ax.legend()
ax.grid(which="major", axis="both")
|
マーカー
#
グラフ作図時のマーカーを’markker=‘で設定することができる。
1
2
3
4
5
6
7
8
9
10
|
x = np.linspace(0, 10, 10)
y = x + np.random.randn(10)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, marker="x")
y = x - np.random.randn(10)
ax.scatter(x, y, marker=".")
plt.legend()
plt.show()
|
No handles with labels found to put in legend.
マーカーの種類は次の通り。
ラインのスタイル
#
ラインのスタイルを変えることができる。
1
2
3
4
5
6
7
8
9
10
|
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = x + np.random.randn(100)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, linestyle="dashed")
plt.show()
|
使えるスタイルは下記の通り。