Python
matplotlib

matplotlibでグリッドを残したまま目盛りの値表示を消す方法

More than 1 year has passed since last update.

問題点

matplotlibで単にgrid()によりグリッドを表示すると
目盛りが表示されている箇所にしか線を引いてくれません

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * 100 + 1)
f = sin(x)

plt.rc('font', family='serif')
plt.figure()
plt.ylim([-1.5, 1.5])
plt.plot(f, color='black')
plt.grid()
plt.show()

例1.png

このグラフに対し、x軸に5刻み、y軸に0.1刻みの線を追加したいとします。
gridは「目盛りが表示されている箇所に線を引いてくれる」のでxticks及びyticksを用いて目盛りを増やしてみると

plt.rc('font', family='serif')
plt.figure()
plt.ylim([-1.5, 1.5])
plt.plot(f, color='black')

# 5刻みに目盛り表示
plt.xticks(list(filter(lambda x: x%5==0, np.arange(201))))
# 0.1刻みに目盛り表示
plt.yticks(list(map(lambda y: y*0.1, np.arange(-15,15))))

plt.grid()
plt.show()

例2.png

というように表示はされるものの目盛りの値表示がひどく見づらくなってしまいます

解決策

そもそもとして、matplotlibの目盛りには大目盛りと小目盛りが存在し、目盛りの値は大目盛りにのみ表示されます。
xticksyticksでは大目盛りの表示を操作していたので、
今回はset_minor_locatorにより小目盛りの表示を操作することで
「グリッドを残したまま目盛りを消す」ことを実現させます

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tick # 目盛り操作に必要なライブラリを読み込みます

x = np.arange(0, 2 * 100 + 1)
f = sin(x)

plt.rc('font', family='serif')
plt.figure()
plt.ylim([-1.5, 1.5])
plt.plot(f, color='black')

# x軸に5刻みにで小目盛り(minor locator)表示
plt.gca().xaxis.set_minor_locator(tick.MultipleLocator(5))
# y軸に0.1刻みにで小目盛り(minor locator)表示
plt.gca().yaxis.set_minor_locator(tick.MultipleLocator(0.1))

# 小目盛りに対してグリッド表示
plt.grid(which='minor')

plt.show()

例3.png
このようにグリッドは小刻みに表示しつつ、目盛りの部分はスッキリさせることができます