Matplotlib

グラフを描く時によく使う設定

import matplotlib.pyplot as plt

# ---------- figure
plt.rcParams['figure.figsize'] =[8, 6]
plt.rcParams["figure.dpi"] = 120
plt.rcParams['figure.facecolor'] = 'white'

# ---------- axes
plt.rcParams['axes.grid'] = True
plt.rcParams['axes.linewidth'] = 1.5

# ---------- ticks
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rcParams['xtick.major.width'] = 1.0
plt.rcParams['ytick.major.width'] = 1.0
plt.rcParams['xtick.major.size'] = 8.0
plt.rcParams['ytick.major.size'] = 8.0

# ---------- lines
plt.rcParams['lines.linewidth'] = 2.5
plt.rcParams['lines.markersize'] = 12

# ---------- grid
plt.rcParams['grid.linestyle'] = ':'

# ---------- font
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['mathtext.fontset'] = 'cm'
plt.rcParams['font.size'] = 20
plt.rcParams['axes.labelsize'] = 26
plt.rcParams['legend.fontsize'] = 26
#plt.rcParams['pdf.fonttype'] = 42    # embed fonts in PDF using type42 (True type)

プロット例

ここでは,plt.plot()のような書き方ではなく fig, ax = plt.subplots(1, 1)のようなオブジェクト指向インターフェースを使用.こちらの書き方に慣れた方が細かい設定ができて便利.

fig, ax = plt.subplots(1, 1)
ax.plot([1, 2 ,3, 4], label='$y = x$')
ax.set_xlabel('test $x$')
ax.set_ylabel('test $y$')
ax.legend(loc='best', frameon=True)

jupyterlabではグラフを作成した後にfig(名前は自分で決める)と打ち込んで実行すれば グラフがいつでも再表示される.

保存

bbox_inches='tight'をつけると,無駄な余白を省いてくれる.

# ---------- save figure
fig.savefig('fig.png', bbox_inches='tight')    # PNG
#fig.savefig('fig.png', bbox_inches='tight', dpi=300)    # high dpi PNG
#fig.savefig('fig.pdf', bbox_inches='tight')    # PDF

カラーサイクル

デフォルト

デフォルト(matplotlib 3.3.2)のカラーサイクルは10色.

fig, ax = plt.subplots(1, 1)
ax.set_xlabel('test $x$')
ax.set_ylabel('test $y$')
#ax.legend(loc='best', frameon=True)

for i in range(12):
    ax.plot([i + 1, i + 2 , i + 3, i + 4])

カラーサイクルのn番目の色を使用

例えば0番目(デフォルトだと青っぽい色)の色を使いたい場合はC0で使用可能.

fig, ax = plt.subplots(1, 1)
ax.set_xlabel('test $x$')
ax.set_ylabel('test $y$')
#ax.legend(loc='best', frameon=True)

for i in range(12):
    ax.plot([i + 1, i + 2 , i + 3, i + 4], 'C0')

水平線

  • axhline()は範囲を割合指定
  • hlines()は範囲を座標で指定
fig, ax = plt.subplots(1, 1)

# ---------- horizontal lines
ax.axhline(y=2, xmin=0, xmax=1, color='black', linewidth=1.0)
ax.axhline(y=2.5, xmin=0.1, xmax=0.9, color='black', linewidth=1.0)
ax.hlines(y=3, xmin=0.5, xmax=2.5, color='black', linewidth=1.0)

ax.plot([1, 2 ,3, 4], label='$y = x$')
ax.set_xlabel('test $x$')
ax.set_ylabel('test $y$')

垂直線

  • axvline()は範囲を割合指定
  • vlines()は範囲を座標で指定
fig, ax = plt.subplots(1, 1)

# ---------- vertial lines
ax.axvline(x=1, ymin=0, ymax=1, color='black', linewidth=1.0)
ax.axvline(x=1.5, ymin=0.1, ymax=0.9, color='black', linewidth=1.0)
ax.vlines(x=2, ymin=1.5, ymax=2.5, color='black', linewidth=1.0)

ax.plot([1, 2 ,3, 4], label='$y = x$')
ax.set_xlabel('test $x$')
ax.set_ylabel('test $y$')
次へ