Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Matplotlib에서 스펙트로그램 위에 X축 그리드 표시하는 방법

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축 그리드가 함께 표시되는 것을 확인할 수 있습니다.