matplotlib

matplotlibの基本的な使い方

更新日: 2022-11-20

figureとaxes #

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)

svg

一つの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()

svg

日本語化 #

デフォルトではラベル等に日本語が使えない。設定ファイルを書き換えてしまうのが簡単だが、移植性が低くなる。そこでスクリプトの最初でフォントを変更する。

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()

svg

散布図

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()

svg

縦棒グラフ

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()

svg

横棒グラフ

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()

svg

ヒストグラム

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()

svg

ボックスプロット

1
2
3
4
5
x = np.random.randn(1000)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot(x)
plt.show()

svg

グラフの調整 #

軸の設定

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")

svg

マーカー #

グラフ作図時のマーカーを’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.

svg

マーカーの種類は次の通り。

ラインのスタイル #

ラインのスタイルを変えることができる。

 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()

svg

使えるスタイルは下記の通り。

comments powered by Disqus