소개
Matplotlib 는 Python 에서 강력한 데이터 시각화 라이브러리입니다. 다양한 그래프, 차트 및 플롯을 생성하기 위한 다양한 도구를 제공합니다. Matplotlib 의 가장 강력한 기능 중 하나는 데이터의 스케일링 능력입니다. 이 랩에서는 양수와 음수 값을 모두 포함하는 매우 넓은 동적 범위를 커버하는 양을 플로팅할 수 있게 해주는 변환인 AsinhScale 을 소개합니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 자유롭게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
Matplotlib 설치
시작하기 전에 Matplotlib 가 설치되어 있는지 확인하십시오. 다음과 같이 pip 명령을 사용하여 설치할 수 있습니다.
pip install matplotlib
필요한 라이브러리 임포트
AsinhScale 을 사용하려면 Matplotlib 라이브러리와 numpy 라이브러리를 임포트해야 합니다. Numpy 는 Python 에서 강력한 수치 계산 라이브러리이며, Matplotlib 과 함께 자주 사용됩니다.
import matplotlib.pyplot as plt
import numpy as np
샘플 데이터 생성
AsinhScale 을 사용하여 데이터를 플롯하기 전에, 몇 가지 샘플 데이터를 생성해야 합니다. numpy 의 linspace 메서드를 사용하여 간단한 선 그래프를 생성할 것입니다.
## y=x 그래프의 변동에 대한 샘플 값 준비:
x = np.linspace(-3, 6, 500)
샘플 y=x 그래프에서 "symlog"와 "asinh" 동작 비교
샘플 y=x 그래프에서 "symlog"와 "asinh"의 동작을 비교해 보겠습니다. 동일한 그래프를 두 번 플롯할 것이며, 한 번은 "symlog"로, 다른 한 번은 "asinh"로 플롯합니다.
fig1 = plt.figure()
ax0, ax1 = fig1.subplots(1, 2, sharex=True)
ax0.plot(x, x)
ax0.set_yscale('symlog')
ax0.grid()
ax0.set_title('symlog')
ax1.plot(x, x)
ax1.set_yscale('asinh')
ax1.grid()
ax1.set_title('asinh')
서로 다른 스케일 파라미터 "linear_width"를 가진 "asinh" 그래프 비교
이제 서로 다른 스케일 파라미터 "linear_width"를 가진 "asinh" 그래프를 비교해 보겠습니다. 서로 다른 "linear_width" 값을 가진 세 개의 그래프를 플롯할 것입니다.
fig2 = plt.figure(layout='constrained')
axs = fig2.subplots(1, 3, sharex=True)
for ax, (a0, base) in zip(axs, ((0.2, 2), (1.0, 0), (5.0, 10))):
ax.set_title(f'linear_width={a0:.3g}')
ax.plot(x, x, label='y=x')
ax.plot(x, 10*x, label='y=10x')
ax.plot(x, 100*x, label='y=100x')
ax.set_yscale('asinh', linear_width=a0, base=base)
ax.grid()
ax.legend(loc='best', fontsize='small')
2D 코시 분포 (Cauchy-distributed) 난수에 대한 "symlog" 및 "asinh" 스케일링 비교
마지막으로, 2D 코시 분포 (Cauchy-distributed) 난수에 대한 "symlog" 및 "asinh" 스케일링을 비교해 보겠습니다. 동일한 그래프를 두 번 플롯할 것이며, 한 번은 "symlog"로, 다른 한 번은 "asinh"로 플롯합니다.
fig3 = plt.figure()
ax = fig3.subplots(1, 1)
r = 3 * np.tan(np.random.uniform(-np.pi / 2.02, np.pi / 2.02,
size=(5000,)))
th = np.random.uniform(0, 2*np.pi, size=r.shape)
ax.scatter(r * np.cos(th), r * np.sin(th), s=4, alpha=0.5)
ax.set_xscale('asinh')
ax.set_yscale('symlog')
ax.set_xlabel('asinh')
ax.set_ylabel('symlog')
ax.set_title('2D Cauchy random deviates')
ax.set_xlim(-50, 50)
ax.set_ylim(-50, 50)
ax.grid()
요약
이 랩에서는 Matplotlib 의 AsinhScale 을 소개했습니다. AsinhScale 은 양수와 음수 값을 모두 포함하는 매우 넓은 동적 범위를 커버하는 양을 플로팅할 수 있게 해주는 변환입니다. 샘플 데이터를 생성하는 방법과 "symlog" 및 "asinh"를 사용하여 그래프를 플롯하는 방법을 배웠습니다. 또한 서로 다른 스케일 파라미터를 가진 "asinh" 그래프를 비교하는 방법과 2D 코시 분포 (Cauchy-distributed) 난수에 대한 "symlog" 및 "asinh" 스케일링을 비교하는 방법을 배웠습니다.