Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

matplotlib – 目盛、目盛のラベル、グリッドの設定方法について

matplotlib – 目盛、目盛のラベル、グリッドの設定方法について

概要

matplotlib で x 軸及び y 軸の目盛り、目盛りに対応するラベル、グリッドを設定する方法について解説します。

Advertisement

x 軸、y 軸の目盛りを設定する

Axes.set_xticks(ticks, minor=False)
Axes.set_yticks(ticks, minor=False)

ticks に x 軸、y 軸の目盛りを表示する位置をリストで渡します。 目盛りは major と minor の2種類あり、minor=False の場合は major の目盛り、minor=True の場合は minor の目盛りの設定になります。

major と minor

In [1]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# x 軸 (major) の目盛りを設定する。
ax.set_xticks(np.linspace(0, np.pi * 4, 5))

# x 軸 (minor) の目盛りを設定する。
ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)

# y 軸 (major) の目盛りを設定する。
ax.set_yticks(np.linspace(-1, 1, 3))

# y 軸 (minor) の目盛りを設定する。
ax.set_yticks(np.linspace(-1, 1, 5), minor=True)

plt.show()

目盛りを無くす

目盛りを無くしたい場合は空の配列を設定します。

In [2]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)

fig, ax = plt.subplots(facecolor="w")
ax.plot(x, y)

# 目盛りを無くす。
ax.set_xticks([])
ax.set_yticks([])

plt.show()

x 軸、y 軸の Axis ごと非表示にしたい場合は Axes.set_axis_off() でもできます。

In [3]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)

fig, ax = plt.subplots(facecolor="w")
ax.plot(x, y)

# 目盛りを無くす。
ax.set_axis_off()

plt.show()

目盛りに対応するラベルを設定する

Axes.set_xticklabels(labels, fontdict=None, minor=False, **kwargs)
Axes.set_yticklabels(labels, fontdict=None, minor=False, **kwargs)

labels に現在設定されている目盛りに対応するラベル名の一覧を指定します。 minor=False の場合は major の目盛り、minor=True の場合は minor の目盛りのラベルの設定になります。

In [4]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 1000)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)

# x 軸 (major) の目盛りを設定する。
ax.set_xticks(np.linspace(0, np.pi * 4, 5))

# x 軸 (major) の目盛りのラベルを設定する。
ax.set_xticklabels(["0", "$1\pi$", "$2\pi$", "$3\pi$", "$4\pi$"])

# y 軸 (major) の目盛りを設定する。
ax.set_yticks(np.linspace(-1, 1, 3))

# y 軸 (major) の目盛りのラベルを設定する。
ax.set_yticklabels(["A", "B", "C"])

plt.show()

# ticks と ticklabels は次のような対応関係にある。
for tick, label in zip(ax.get_xticks(), ax.get_xticklabels()):
    print("{:5.2f}: '{}'".format(tick, label.get_text()))
#  0.00: '0'
#  3.14: '$1\pi$'
#  6.28: '$2\pi$'
#  9.42: '$3\pi$'
# 12.57: '$4\pi$'

for tick, label in zip(ax.get_yticks(), ax.get_yticklabels()):
    print("{:5.2f}: '{}'".format(tick, label.get_text()))
# -1.00: 'A'
#  0.00: 'B'
#  1.00: 'C'
 0.00: '0'
 3.14: '$1\pi$'
 6.28: '$2\pi$'
 9.42: '$3\pi$'
12.57: '$4\pi$'
-1.00: 'A'
 0.00: 'B'
 1.00: 'C'

グリッドを設定する

グラフにグリッドを表示するには、以下の関数を呼び出します。

pyplot.grid(b=None, which='major', axis='both', **kwargs)
Axes.grid(b=None, which='major', axis='both', **kwargs)

b 引数になにも指定しなかった場合、グリッドの表示/非表示を現在の状態から切り替えます。

  • True/False: グリッドを表示/非表示にする
  • None: グリッドの表示/非表示を現在の状態から切り替える
In [5]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)

fig, ax = plt.subplots(facecolor="w")
ax.plot(x, y)
ax.grid()

plt.show()

which 引数で線を引く目盛りの種類を指定できます。

  • major: major の目盛りにのみ線を引く
  • minor: minor の目盛りにのみ線を引く
  • both: major、minor の両方の目盛りに線を引く

axis 線を引く軸を指定できます。

  • x: x 軸の目盛りにのみ線を引く
  • y: y 軸の目盛りにのみ線を引く
  • both: x 軸、y 軸の両方の目盛りに線を引く。
Advertisement

外側の Axes だけ目盛のラベルを表示する

複数のグラフがある場合に Axes.label_outer() を呼び出すと、外側の Axes のみ目盛のラベルを表示します。

In [6]:
import numpy as np
from matplotlib import pyplot as plt

x1 = np.linspace(0, 5, 100)
x2 = np.linspace(0, np.pi * 2, 100)

fig, ax = plt.subplots(2, 2, figsize=(6, 6), facecolor="w")
ax[0, 0].plot(x1, x1)
ax[0, 1].plot(x1, np.abs(x1))
ax[1, 0].plot(x2, np.sinh(x2))
ax[1, 1].plot(x2, np.cosh(x2))

# 外側だけ目盛のラベルを表示する。
ax[0, 0].label_outer()
ax[0, 1].label_outer()
ax[1, 0].label_outer()
ax[1, 1].label_outer()

plt.show()

x 軸、y 軸を反転させる

Axes.invert_xaxis() で x 軸、Axes.invert_yaxis() で y 軸を反転できます。

In [7]:
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)

fig, ax = plt.subplots(facecolor="w")
ax.plot(x, y)
ax.grid()
ax.invert_xaxis()
ax.invert_yaxis()

plt.show()