독자가 그래프 각 요소의 정확한 값을 알 필요가 있다면 grid를 그려주는 것이 좋다.
주요 parameters
c: 색깔
alpha: 투명도
axis: 어느 축의 tick들에서 출발하는 grid를 그릴 것인가? ('x', 'y', 'both')
기본형 ax.grid
ax.grid()만 실행하면 간편하게 x축, y축의 major tick들에 해당하는 grid를 그려 준다. 하지만 보통 grid가 그래프 요소들의 위로 올라오는 문제가 생기는데, 어떻게 해결하면 되는지 아래에서 알아보도록 하자.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5)
ax.grid()
Python
복사
Grid를 그래프 뒤로 보내기 zorder
Matplotlib Figure 내의 각 요소들은 자신만의 zorder 를 갖는다. 두 요소가 겹쳤을 때 어떤 요소를 보여줄 것인지는 요소 zorder 값에 의해 결정된다. Grid 요소와 scatterplot point 요소의 zorder 값을 한 번 확인해보자.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5)
ax.grid()
print('x-gridline zorder', ax.get_xgridlines()[0].zorder)
print('y-gridline zorder', ax.get_ygridlines()[0].zorder)
print('Scatterplot points zorder', ax.collections[0].zorder)
Python
복사
x축, y축 그리드 선의 zorder 값은 2인데 반해 scatterplot point의 zorder 값은 1이다. 따라서 더 값이 큰 그리드 선이 더 위에 그려지게 되는 것이다.
해결 방법은 ax.scatter를 실행할 때 zorder 값을 충분히 크게 설정하는 것이다. 그러면 원하던 대로 그리드 선이 그래프 뒤로 간 것을 확인할 수 있다.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
# zorder를 충분히 큰 값으로 설정하자
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5, zorder=10)
ax.grid()
print('x-gridline zorder', ax.get_xgridlines()[0].zorder)
print('y-gridline zorder', ax.get_ygridlines()[0].zorder)
print('Scatterplot points zorder', ax.collections[0].zorder)
Python
복사
Grid를 그래프 뒤로 보내기 (더 쉽게) ax.set_axisbelow(True)
zorder 조작으로도 그리드를 뒤로 보낼 수 있지만, 더 쉬운 방법이 있다. ax.set_axisbelow(True) 를 쓰면 된다.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5)
ax.grid()
ax.set_axisbelow(True)
Python
복사
색깔 설정 c
나는 보통 그리드의 색깔로 c='0.8'을 이용하는 편이다. 눈에 거슬리지 않으면서도 자연스럽게 그려진다.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5, zorder=10)
ax.grid(c='0.8')
Python
복사
x축 혹은 y축 그리드만 그리고 싶을때 axis
axis 파라미터는 'x', 'y', 'both' 의 값을 가진다. 기본적으로는 both여서, x축과 y축에 있는 모든 major tick들에서 출발하는 격자가 그려지게 된다. x축 tick에서 출발하는 격자만 그리고 싶을 때는 어떻게 할까? (즉, 세로선만 그리고 싶을 때) axis='x'를 주면 된다.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5, zorder=10)
ax.grid(c='0.8', axis='x')
Python
복사
가로 그리드도 마찬가지로 axis='y' 를 주면 된다.
fig = plt.figure(figsize=(3, 1))
ax = fig.add_subplot()
x = np.linspace(0, 10 * np.pi, 1000)
ax.scatter(x, np.sin(x) + np.random.normal(size=x.shape), s=1.5, zorder=10)
ax.grid(c='0.8', axis='y')
Python
복사