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

Matplotlib에서 곡선의 논리적 음영 영역 만드는 방법

Matplotlib에서 곡선의 특정 구간을 조건에 따라 논리적으로 음영 처리하려면 BrokenBarHCollection 클래스의 span_where() 메서드를 활용할 수 있습니다. 이 방법을 사용하면 곡선 값이 양수인 구간과 음수인 구간을 각각 다른 색상으로 손쉽게 강조할 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 자동으로 조정합니다.

  • NumPy를 사용하여 t, s1, s2 데이터 포인트를 생성합니다.

  • figure와 subplot 세트를 생성합니다.

  • ts1 데이터를 플롯하고, 축을 가로지르는 수평 기준선(axhline)을 추가합니다.

  • 조건(where)에 해당하는 x 구간들에 대해 지정된 y 범위(ymin~ymax)만큼 가로 막대 모음(collection)을 생성합니다.

  • 생성한 ~.Collection 객체를 axes의 컬렉션에 추가합니다.

  • show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as collections

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

t = np.arange(0.0, 2, 0.01)
s1 = np.sin(2 * np.pi * t)
s2 = 1.2 * np.sin(4 * np.pi * t)

fig, ax = plt.subplots()

ax.plot(t, s1, color='black')
ax.axhline(0, color='black', lw=2)

collection = collections.BrokenBarHCollection.span_where(t, ymin=0, ymax=1,
    where=s1 > 0, facecolor='green', alpha=0.5
)
ax.add_collection(collection)

collection = collections.BrokenBarHCollection.span_where(t, ymin=-1, ymax=0,
    where=s1 < 0, facecolor='red', alpha=0.5
)
ax.add_collection(collection)

plt.show()

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다. 사인 곡선에서 값이 양수(0보다 클 때)인 구간은 초록색으로, 음수(0보다 작을 때)인 구간은 빨간색으로 반투명하게 음영 처리되어 시각적으로 한눈에 구분할 수 있습니다.

Matplotlib에서 곡선의 논리적 음영 영역 만드는 방법