Pynote

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

matplotlib - 目盛、目盛のラベル、グリッドの設定方法

目盛りを設定する。

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

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


import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(facecolor="w")
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()


目盛りを無くす。

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

import matplotlib.pyplot as plt
import numpy as np

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


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

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)

# 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'


ラベルのパラメータを設定する。

ラベルのフォントサイズ、色など matplotlib.text.Text オブジェクトのパラメータを指定できる。

www.pynote.info

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)

# 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$"], fontsize=14, rotation=60
)

plt.show()


グリッドを設定する。

  • pyplot.grid: グリッドを表示するかどうかを設定する。
  • axes.Axes.grid: グリッドを表示するかどうかを設定する。
pyplot.grid(b=None, which='major', axis='both', **kwargs)
Axes.grid(b=None, which='major', axis='both', **kwargs)

引数

  • b: グリッドを表示するかどうかを指定する。
    • True/False: グリッドを表示/非表示にする。
    • None: グリッドの表示/非表示を現在の状態から切り替える。
  • which: 線を引く目盛りの種類を指定する。
    • major: major の目盛りにのみ線を引く。
    • minor: minor の目盛りにのみ線を引く。
    • both: major、minor の両方の目盛りに線を引く。
  • 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 = ["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)

    # x 軸のラベルを設定する。
    ax.set_xticks(np.linspace(0, np.pi * 4, 5))
    ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)

    # y 軸のラベルを設定する。
    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()


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)

    # x 軸のラベルを設定する。
    ax.set_xticks(np.linspace(0, np.pi * 4, 5))
    ax.set_xticks(np.linspace(0, np.pi * 4, 17), minor=True)

    # y 軸のラベルを設定する。
    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()


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

matplotlib.axes.SubplotBase.label_outer を呼び出すと、外側の Axes のみ目盛のラベルを表示する。

import matplotlib.pyplot as plt
import numpy as np

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