Pynote

Python、機械学習、画像処理について

matplotlib - 目盛、グリッドの調整方法

概要

matplotlib で 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 の場合は major の目盛りを設定する。

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xticks(np.linspace(0, np.pi * 4, 5))
ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)
ax.set_yticks(np.linspace(-1, 1, 3))
ax.set_yticks(np.linspace(-1, 1, 5), minor=True)

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 の目盛りのラベルを設定する。

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xticks(np.linspace(0, np.pi * 4, 5))
ax.set_yticks(np.linspace(-1, 1, 3))
ax.set_xticklabels(['0', '$1\pi$', '$2\pi$', '$3\pi$', '$4\pi$'])
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$'


グリッドを設定する。

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

b でグリッドを表示するかを指定する。

  • True/False: グリッドを表示/非表示にする。
  • None: グリッドの表示/非表示を現在の状態から切り替える。
  • major: major の目盛りにのみ線を引く。
  • minor: minor の目盛りにのみ線を引く。
  • both: major、minor の両方の目盛りに線を引く。
import matplotlib.pyplot as plt
import numpy as np

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

params = ['major', 'minor', 'both']

fig = plt.figure(figsize=(7, 7))
fig.subplots_adjust(hspace=0.5)
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(3, 1, i)
    ax.plot(x, y)

    ax.set_xticks(np.linspace(0, np.pi * 4, 5))
    ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)
    ax.set_yticks(np.linspace(-1, 1, 3))
    ax.set_yticks(np.linspace(-1, 1, 5), minor=True)
    ax.grid(which=p)
    ax.set_title("which='{}'".format(p))

plt.show()

axis で線を表示する軸を選択する。

  • x: x 軸の目盛りにのみ線を引く。
  • y: y 軸の目盛りにのみ線を引く。
  • both: x 軸、y 軸の両方に目盛りに線を引く。
import matplotlib.pyplot as plt
import numpy as np

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

params = ['both', 'x', 'y']

fig = plt.figure(figsize=(7, 7))
fig.subplots_adjust(hspace=0.5)
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(3, 1, i)
    ax.plot(x, y)

    ax.set_xticks(np.linspace(0, np.pi * 4, 5))
    ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)
    ax.set_yticks(np.linspace(-1, 1, 3))
    ax.set_yticks(np.linspace(-1, 1, 5), minor=True)
    ax.grid(axis=p)
    ax.set_title("axis='{}'".format(p))

plt.show()