개수가 많은 라인을 출력할 때, plt.figure() 도화지에 설정한 도화지 크기에 맞추어 x축에 틱(tick) 간격이 알아서 나타난다. 틱 간격과 표시 방법을 마음 껏 정하는 예제를 만들어보았다.

여기서는 크게 아래 두 가지 재료에 자잘한 재료 세 가지를 더 쓰면 된다. 예제를 가져다 필요한 부분만 수정해서 쓰면 된다.

  • plt.subplot().xaxis.set_major_locator() : 틱 간격 나타낼 놈

  • plt.subplot().xaxis.set_major_formatter() : 아래 포맷터를 쓸 놈

  • plt.MultipleLocator() : 어느 간격으로 틱을 표시할 거냐

  • plt.FuncFormatter() : 아래 포맷 함수를 가져다 쓸 놈

  • format_func : 커스텀 함수. 이름은 아무거나 쓰자.

아래 함수들에 0 부터 pi까지 값을 1000개로 쪼개서 넣자.

 

 

f0 = lambda x : 5 + x - x
f1 = lambda x : 2 * np.cos(2 * np.pi * x - np.pi / 2)
f2 = lambda x : 3 * np.cos(4 * np.pi * x)
f = lambda x : f0(x) + f1(x) + f2(x)
x = np.linspace(0, np.pi, 1000)

 

화면에 그림으로 나타내보자.

 

plt.figure(figsize=(12,2.5),dpi=160)
ax = plt.subplot()
plt.plot(f(x),color='blue',label='f(x)')
plt.plot(f0(x),':',label='5')
plt.plot(f1(x),':',label='$\cos (2\pi x - \pi/2)$')
plt.plot(f2(x),':',label='$\cos (4\pi x)$')
ax.xaxis.set_major_locator(plt.MultipleLocator(250))
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))
plt.legend()
plt.show()

x 값이 1000개 들어갔지만 7번 라인에서 250개 마다 틱을 보이도록 했다. 그리고 각 틱 마다 8번 라인에서 포맷 함수에 따라 특정한 형태로 표시하도록 했다.

 

포맷 함수는 아래처럼 만들어 쓴다.

 

 

def format_func(value, tick_number):
N = int(value)
if N == 0:
return '$N$'
elif N == 250:
return '$\pi/4$'
elif N == 1000:
return '$\pi$'
else:
return f'${N//250}\pi/4$'

 

그러고 나면 아래 그림이 나타난다.

 

 

코드 합체 버전은 아래

 

f0 = lambda x : 5 + x - x
f1 = lambda x : 2 * np.cos(2 * np.pi * x - np.pi / 2)
f2 = lambda x : 3 * np.cos(4 * np.pi * x)
f = lambda x : f0(x) + f1(x) + f2(x)
x = np.linspace(0, np.pi, 1000)
def format_func(value, tick_number):
N = int(value)
if N == 0:
return '$N$'
elif N == 250:
return '$\pi/4$'
elif N == 1000:
return '$\pi$'
else:
return f'${N//250}\pi/4$'
plt.figure(figsize=(12,2.5),dpi=160)
ax = plt.subplot()
plt.plot(f(x),color='blue',label='f(x)')
plt.plot(f0(x),':',label='5')
plt.plot(f1(x),':',label='$\cos (2\pi x - \pi/2)$')
plt.plot(f2(x),':',label='$\cos (4\pi x)$')
ax.xaxis.set_major_locator(plt.MultipleLocator(250))
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))
plt.legend()
plt.savefig('./example.png')
plt.show()

Posted by 공돌이pooh
,