Pynote

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

matplotlib - Axes オブジェクトのカスタマイズ

アスペクト比を設定する。

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

fig = plt.figure(figsize=(8, 5))
params = [0.5, 2, 'auto', 'equal']
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(2, 2, i, aspect=p)
    ax.plot(x, y)
    # タイトルを設定する。
    s = "'{}'".format(p) if isinstance(p, str) else p
    ax.set_title("aspect={}".format(s))

plt.show()


表示の前後関係を設定する。

axisbelow で Axes の zorder を設定できる。
zorder が大きいほうが前に表示される。

  • True
    • axes: 0.5
    • Patch, PatchCollectio: 1
    • Line2D, LineCollection: 2
    • Text: 3
  • 'line'
    • Patch, PatchCollectio: 1
    • axes: 1.5
    • Patch, PatchCollectio: 1
    • Line2D, LineCollection: 2
    • Text: 3
  • False
    • Patch, PatchCollectio: 1
    • Line2D, LineCollection: 2
    • axes: 2.5
    • Text: 3
from matplotlib.patches import Rectangle

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


def draw_items(ax):
    ax.add_patch(Rectangle((0, 0), 5, 1, color='r'))  # Patch
    ax.grid(color='k')  # グリッド
    ax.plot(x, y)  # Line2D
    ax.text(0, 0.5, 'Text', fontsize=20)  # Text

fig = plt.figure(figsize=(10, 3))
params = [True, False, 'line']
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(1, 3, i, axisbelow=p)
    draw_items(ax)
    # タイトルを設定する。
    s = "'{}'".format(p) if isinstance(p, str) else p
    ax.set_title("axisbelow={}".format(s))

plt.show()


背景色を設定する。

fig = plt.figure(figsize=(8, 3))
params = ['lightgray', 'lightgreen', 'lightblue']
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(1, 3, i, facecolor=p)
    ax.plot(x, y)
    # タイトルを設定する。
    s = "'{}'".format(p) if isinstance(p, str) else p
    ax.set_title("facecolor={}".format(s))

plt.show()


枠を付けるかどうかを設定する。

fig = plt.figure(figsize=(8, 5))
params = [True, False]
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(2, 2, i, frame_on=p)
    ax.plot(x, y)
    # タイトルを設定する。
    s = "'{}'".format(p) if isinstance(p, str) else p
    ax.set_title("frame_on={}".format(s))

plt.show()


タイトルを設定する。

fig = plt.figure()
ax = fig.add_subplot(111, title='title')
ax.plot(x, y)

plt.show()


サブタイトルを設定する。

fig = plt.figure()
ax = fig.add_subplot(111, xlabel='xlabel')
ax.plot(x, y)

plt.show()


dataLim と viewLim

dataLim は表示するデータがすべて収まる長方形、viewLim は Axes の長方形を表す。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectangle

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

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

rect1 = Rectangle(ax.dataLim.min, ax.dataLim.width, ax.dataLim.height,
                  edgecolor='r', fc='none', lw=2, zorder=5, clip_on=False)
rect2 = Rectangle(ax.viewLim.min, ax.viewLim.width, ax.viewLim.height,
                  edgecolor='g', fc='none', lw=2, zorder=5, clip_on=False)
ax.add_patch(rect1)
ax.add_patch(rect2)