問題点
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()
このグラフに対し、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()
というように表示はされるものの目盛りの値表示がひどく見づらくなってしまいます
解決策
そもそもとして、matplotlibの目盛りには大目盛りと小目盛りが存在し、目盛りの値は大目盛りにのみ表示されます。
xticks
とyticks
では大目盛りの表示を操作していたので、
今回は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()