Python Matplotlib에서 스펙트로그램 위에 X축 그리드 표시하기
Python의 Matplotlib에서 스펙트로그램(spectrogram) 위에 X축 그리드를 표시하려면 grid() 메서드를 활용하면 됩니다. 아래 단계를 순서대로 따라 해 보세요.
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백을 조정합니다.
- numpy를 사용하여 t, s1, s2, nse, x, NFFT, Fs 데이터 포인트를 생성합니다.
- subplots() 메서드에 nrows=2를 지정하여 새 figure를 생성하거나 기존 figure를 활성화합니다.
- plot() 메서드로 t와 x 데이터를 플롯합니다.
- 현재 라인 스타일로 그리드를 배치합니다.
- X축 마진(margins)을 설정합니다.
- specgram() 메서드로 스펙트로그램을 그립니다.
- 점선(dotted) 스타일 등 다양한 속성을 적용한 그리드를 배치합니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True dt = 0.0005 t = np.arange(0.0, 20.0, dt) s1 = np.sin(2 * np.pi * 100 * t) s2 = 2 * np.sin(2 * np.pi * 400 * t) s2[t <= 10] = s2[12 <= t] = 0 nse = 0.01 * np.random.random(size=len(t)) x = s1 + s2 + nse NFFT = 1024 Fs = int(1.0 / dt) fig, (ax1, ax2) = plt.subplots(nrows=2) ax1.plot(t, x) ax1.grid(axis="x", ls="dotted", lw=2, color="red") ax1.margins(x=0) Pxx, freqs, bins, im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900) ax2.grid(axis="x", ls="dotted", lw=2, color="red") plt.show()
코드 설명
먼저 100Hz와 400Hz의 사인파 신호에 난수 노이즈를 더해 복합 신호 x를 만듭니다. 이때 NFFT는 1024, 샘플링 주파수 Fs는 dt의 역수로 설정됩니다. 첫 번째 축(ax1)에는 시간 영역의 파형을 그리고, 두 번째 축(ax2)에는 specgram()으로 주파수 분석 결과인 스펙트로그램을 그립니다. 두 축 모두 grid(axis="x", ls="dotted", lw=2, color="red")를 호출하여 빨간색 점선 스타일의 X축 그리드를 스펙트로그램 위에 겹쳐 표시합니다.
실행 결과
위 코드를 실행하면 상단에는 시간 영역 신호 파형이, 하단에는 해당 신호의 스펙트로그램이 나타나며, 두 플롯 모두 빨간색 점선으로 이루어진 X축 그리드가 함께 표시되는 것을 확인할 수 있습니다.