Python의 Matplotlib 라이브러리로 상자 그림(boxplot)을 그릴 때 데이터에 NaN(Not a Number) 값이 포함되어 있으면 오류가 발생하거나 그래프가 올바르게 표시되지 않을 수 있습니다. 이 문제를 해결하려면 시각화 전에 NaN 값을 제거한 필터링된 데이터를 사용해야 합니다.
처리 단계
그림 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
데이터 샘플 수와 범위를 위한 변수 N을 초기화합니다.
무작위 분포(spread), 중심 데이터(center), 위쪽 이상치(flier high), 아래쪽 이상치(flier low)를 생성한 후, 이들을 하나로 연결(concatenate)하고 NaN이 제거된 필터링된 데이터를 만듭니다.
boxplot() 메서드를 사용하여 상자 그림을 생성합니다.
show() 메서드를 사용하여 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt import numpy as np # 그림 크기 설정 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 데이터 샘플 수 N = 10 # 무작위 분포 데이터 spread = np.random.rand(N) # 중심 데이터 center = np.ones(N) # 위쪽/아래쪽 이상치 데이터 fh = np.random.rand(N)+N fl = np.random.rand(N)-N # 데이터 연결 data = np.concatenate((spread, center, fh, fl), 0) data[5] = np.NaN # NaN 값이 제거된 필터링 데이터 filtered_data = data[~np.isnan(data)] # 상자 그림 그리기 plt.boxplot(filtered_data) plt.show()
핵심 포인트
위 코드에서 가장 중요한 부분은 다음 한 줄입니다:
filtered_data = data[~np.isnan(data)]
np.isnan(data)는 배열에서 NaN인 요소를 찾아내고, 물결표(~) 연산자로 이를 반전시켜 NaN이 아닌 값만 선택합니다. 이렇게 필터링된 데이터를 boxplot()에 전달하면 NaN 값으로 인한 오류 없이 깔끔한 상자 그림을 얻을 수 있습니다.
실행 결과
위 코드를 실행하면 NaN 값이 제거된 데이터를 기반으로 한 상자 그림이 출력됩니다.
