2019년 9월 3일 화요일

cave plot


두개 이상의 시계열 자료를 동굴 형태로 그리면 비교하기가 좋습니다. 이런 형태의 그래프를   1994년에  RA Becker, LA Clark D Lambert이 제안했는데 R 패키지도 있습니다.
여기서는 cave plot를 파이썬으로 그려봅니다.  그릴 데이터는 10년만기 미국 국채 금리와1온스 금값입니다. 일반적으로 두 값은 반대로 가는 것으로 알려져 있습니다.   데이터는  https://fred.stlouisfed.org/ 에서 과거 10년치 기록을 가져와서 구글 드라이브에 올렸습니다. 




전체 프로그램은https://github.com/yoojchul/cave-plot 에 있습니다.


구글 드라이브에 있는 파일을 읽어서  리스트로 만드는 부분입니다.  [[2009-01-14, 1.3, 1200], [2009-01-15, 1.2, 1211] , … ] 같은 리스트를 만듭니다.   데이터에 “.” 표시는 거래가 없는 날이라 시가 정보가 없기 때문일겁니다.  전날의 값을 기록했다가 사용합니다.


Y축 양쪽에 ticks가 보여야하기 때문에 ax가 두개입니다. 하나(변수 ax1)subplots()으로 먼저 만들고 나중에 다른 하나(변수 ax2) twinx()로 만듭니다.   왼쪽에 ticks를 가지는 ax1   ylabel“DGS10”이라고 하고 색상은 파란색으로 표시합니다.  DGS1010년 만기 미국 국채 금리를 뜻하는 약자입니다.


리스트의 요소를 하나씩 읽어   미리 구한 DGS10의 최대값인 max_rate와 금값의 최대값인 max_goldnormalization합니다.  금값(gold) (1.0 - x) 로 값을 뒤집고 0.8을 더해서 DGS10위에 떠 있게 합니다.  리스트 변수 year_labels x축을 연도로 표시할 때 사용합니다.  변수  ratesgolds는 실제 그래프를 그릴 데이터입니다.  변수 goldsrates와 같이 첫번째 ax(ax1)를 통해 그리는 것에 주의합니다. 두번째 ax에 그리지 않습니다.


y축의 tick label 비율이 아니라 DGS10값으로 표시합니다.   비율로 따지면 0.2, 0.4, 0.6, 0.8, 1.0 그리고 1.2 지점인데 normalization의 역으로 원래 값을 찾아 표시합니다. 함수   round(v, 1-int(floor(log10(absv)))))는 유효숫자 2자리만 표시하기 위해 호출합니다.


함수 twinx()  오른쪽 y ticks를 그리기 위한 두번째 ax(변수 ax2)를 얻습니다.   LabelGold로 하고 적색으로 표시합니다.  변수 ax1의 범위를 get_ylim()으로 얻어와 ax2의 범위를 set_ylim()으로 지정하는 것이 중요합니다.  그러지 않으면 ax2의 범위는 ax1와 달라지고 결정적으로 tick도 다르게 표시합니다.


오른쪽 y축의 tick도 왼쪽과 같이 0.2, 0.4, 0.6, 0.8, 1.0 그리고 1.2의 위치에 해당하는 원래 값을 찾아 tick label로 삼습니다.


Cave plot는 두개의 시계열 변수가 비례 혹은 반비례 관계일 때 유용합니다.  위와 같은 선 그래프에서는 cave plot의 유리함이 부족한데  막대 그래프라면 샹황이 다를 것 같습니다.  막대를 나란히 세우는 것보다는 위에 배치하는 것이 비교하는데 유리하겠습니다.

댓글 없음:

댓글 쓰기