그래프와 시각화 2편

참고: 웨스 맥키니의 <파이썬 라이브러리를 활용한 데이터 분석>의 9장 1절에 사용된 소스코드를 활용한다.

기본 설정

matplotlib.pyplot의 시각화 도구 API

matplotlib.pyplot.plot() 함수

간단한 2차원 그래프를 그리는 함수이다.

가장 간단한 사용법은 아래 코드에서처럼 y축 좌표들의 리스트 또는 어레이만 인자로 넣어줄 때이다. 그러면 x축 좌표는 해당 값들의 인덱스가 사용된다.

참고: 공식 문서: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html

Figure 객체와 서브플롯(subplot)

모든 그래프는 Figure 객체 내에 존재하며, matplotlib.pyplot.figure() 함수에 의해 생성된다.

Figure 객체 내에 그래프를 그리려면 서브플롯(subplot)을 지정해야 한다. 아래 코드는 add_subplot() 함수를 이용하여 지정된 Figure 객체안에 그래프를 그릴 공간을 준비한다.

두 개의 그래프 공간을 더 추가하면 다음과 같다.

그래프 삽입하기

두 가지 방식으로 각각의 서브플롯에 그림을 삽입할 수 있다.

방식 1: matplotlib.pyplot.plot() 함수 활용

이 방식은 항상 마지막에 선언된 서브플롯에 그래프를 그린다. 예를 들어 아래 코드는 무작위로 선택된 50개의 정수들의 누적합으로 이루어진 데이터를 파선 그래프로 그린다.

참고: 어레이가 주어졌을 때 해당 어레이의 누적합 어레이는 동일한 크기를 가지면서 인덱스별 항목은 0번 인덱스부터 해당 인덱스의 항목까지의 합으로 지정된다.

주의사항: 주피터 노트북을 사용할 경우 matplotlib.pyplot.figure(), matplotlib.pyplot.add_subplot() 등 직접 그래프를 그리고 관리하는 함수들은 모두 하나의 셀에서 실행되어야 한다.

방식 2: 객체명.plot() 함수 활용

특정 서브플롯에 그래프를 삽입하려면 객체 이름과 함께 plot() 함수 등을 호출해야 한다.

서브플롯 관리

matplotlib.pyplot.subplots() 함수는 여러 개의 서브플롯을 포함하는 Figure 객체를 관리해준다. 예를 들어, 아래 코드는 2x3 크기의 서브플롯을 담은 (2,3) 모양의 넘파이 어레이로 생성한다.

plt.subplots_adjust() 함수는 각 서브플롯 사이의 여백을 조절하는 방식을 보여준다. 여백의 크기는 그래프의 크기와 숫자에 의존한다.

색상, 마커, 선 스타일

그래프의 속성을 여러 방식으로 지정할 수 있다.

아래 두 코드는 동일한 그림을 그려준다. 단, 무작위성 때문에 무작위성의 시드(seed)를 지정해줘야 한다.

색상은 RGB 값을 HEX 코드를 이용하여 직접 사용할 수도 있다.

참고: RGB 색상의 HEX 코드 찾기

여러 그래프 하나의 서브플롯에 그리기

여러 스타일의 그래프를 하나의 서브플롯에 그려 다양한 정보를 동시에 전달할 수도 있다.

plt.legend() 함수는 각 그래프의 label 속성 정보를 이용하여 범례를 적절한 곳에 생성한다.

눈금과 라벨

이미지 타이틀, 축 이름, 눈금, 눈금 이름 지정

두 가지 방식으로 진행할 수 있다.

방식 1: 파이플롯 객체의 메서드 활용
방식 2: pyplot 모듈의 함수 활용

이 방식은 마지막에 선언된 서브플롯에 대해서만 작동한다.

서브플롯에 주석 및 도형 추가하기

주석 추가

설명을 위해 S&P 500 (스탠다드 앤 푸어스, Standard and Poor's 500)의 미국 500대 기업을 포함한 주식시장지수 데이터로 그래프를 생성하고 2007-2008년 사이에 있었던 재정위기와 관련된 중요한 날짜를 주석으로 추가한다.

여기서는 시간 컬럼을 행의 인덱스로 사용한다.

참고: parse_dates=True 를 지정하지 않으면 원래 그대로 가져온다.

data = pd.read_csv(spx_path, index_col=0)

하나의 열만 존재하는 데이터프레임이기에 시리즈로 변환한다.

참고: 반드시 필요한 과정은 아니다. spx 대신 data를 그대로 사용해도 동일하게 작동한다.

위 데이터를 단순하게 그래프로 나타내면 다음과 같다.

참고: 판다스의 시리즈와 데이터프레임은 자체적으로 plot() 메서드를 지원한다.

2007-2008년 세계적 금융위기 지점을 아래 내용으로 그래프에 주석으로 추가해보자.

annotate() 메서드 활용

도형 추가

지정된 함수를 이용하여 다양한 도형을 추가할 수 있다.

주의사항: x, y축의 눈금이 다르면 도형이 정확하게 표현되지 않을 수 있다. 예를 들어, 아래에서 원이 타원으로 보이는 이유가 두 축의 척도가 다르기 때문이다.

척도를 맞추는 방법으로 Figure 객체를 생성할 때 두 축의 크기를 동일하게 지정하면 된다.

그래프 저장하기

plt.savefig() 함수를 이용하여 그래프를 원하는 포맷의 파일로 저장할 수 있다.

matplotlib 기본 설정

plt.rc() 함수를 이용하여 matplot을 이용하여 생성되는 이미지 관련 설정을 전역적으로 지정할 수 있다. 사용되는 형식은 다음과 같다.

참고: 'rc' 는 기본설정을 의미하는 단어로 많이 사용된다. 풀어 쓰면 "Run at startup and they Configure your stuff", 즉, "프로그램이 시작할 때 기본값들을 설정한다"의 의미이다. '.vimrc', '.bashrc', '.zshrc' 등 많은 애플리케이션의 초기설정 파일명에 사용되곤 한다.

아래 코드는 이미지의 사이즈를 지정한다.

아래 코드는 다양한 속성을 지정하는 방식을 보여준다.

아래 코드는 앞서 설정된 다양한 속성을 반영한 결과를 보여준다.