다른 축을 참조하는 데이터를 겹쳐 그리기

두 가지의 데이터가 있고, 이를 하나의 차트에 겹쳐 그려야하는 상황이라고 생각해 봅시다. 두 가지 이상의 데이터여도 상관 없습니다. 예를 들면, 자동기상관측(AWS) 자료 같은 경우에는 기온, 기압, 풍향, 풍속을 한 차트에 그리지요. 기온과 기압이 어떤 관계식에 의해서 변환되거나 하지 않습니다. 풍향 풍속도 마찬가지입니다.  IDL New Graphics에서 이런 데이터를 중첩하여 그리는 방법의 핵심은 다음과 같습니다.

  • PLOT을 생성할 때마다 차트의 영역(POSITION)을 반드시 정의합니다. 그렇지 않으면 자동으로 차트의 영역을 설정하는 IDL의 디폴트 기능으로 축이 어긋날 수 있습니다.
  • 1번 데이터의 PLOT을 그립니다. 이 때 필요에 따라 축을 그리지 않을 수도 있어야 합니다.
  • 2번 데이터의 PLOT을 그립니다. 이 때부터는 /CURRENT 키워드를 이용해서 기존의 창에 겹쳐 그리도록 해야 합니다. 이 때는 축을 그리지 않는 것이 일반적입니다. 1번 플롯과 2번 플롯은 이제 영역만 겹쳐져 있을 뿐 완전히 남남인 차트입니다.
  • 2번 데이터가 참조할 축을 그립니다(AXIS). 축의 위치는 자유롭게 설정할 수 있습니다.
  • N번 데이터의 PLOT을 그리고 참조할 축을 그리는 과정은 2번과 동일합니다.
  • 꼭 PLOT이어야 할 필요는 없습니다. BARPLOT, IMAGE, CONTOUR 등 모든 플롯이 중첩될 수 있습니다.

이를 설명하기 위해, 위의 모든 내용을 포함하면서도 최대한 단순한 예제를 들어 보겠습니다.

  1.  두 개 이상의 데이터를 정확히 일치하는 공간에 겹쳐 그리기 위해서는 POSITION이나 MARGIN 같은 위치 지정 키워드 사용이 필수입니다. 여러번 반복해서 사용해야 되는 값이기 때문에, 변수로 따로 지정하였습니다.  이후에는 이 값만 마꾸면 코드 전체에서 POSITION을 조정할 수 있다는 장점도 있구요.
  2. 이 예제에서는 X 좌표는 공유합니다.
  3. 아주 평범한 PLOT입니다. y=2x 죠. POSITION 지정했구요, AXIS_STYLE=1 이라고 하면 왼쪽과 아래쪽의 축만 그리고 나머지 축은 숨김으로 하는 설정입니다. 디폴트 설정은 AXIS_STYLE=2 인데 이는 BOX형으로 네 개의 모든 축을 그리는 거구요. 오른쪽에는 다른 Y축을 그릴 계획이어서 이렇게 AXIS_STYLE=1이라고 했습니다. 축과 데이터를 색으로 매칭 시키고자 하는 목적으로 데이터를 빨강으로 그립니다.
  4. New Graphics에서는 축 하나하나를 따로 설정할 수 있습니다. 이 때 축을 지정하는 방법이 두 가지가 있는데, 이와 같이 HASH형(무슨 말인지 이해 안하셔도 괜찮습니다)으로 지정하는 방법이 편해요. p1[‘axis1’] 이라고 하면 p1 플롯에서 왼쪽축을 의미합니다. axis0은 아래쪽, axis2=위쪽, axis3=오른쪽을 의미하고, 3차원 플롯일 경우에는 이 순서가 조금 다릅니다. 즉 이 부분은 p1 플롯의 왼쪽 축의 색깔을 빨강으로 하라는 의미입니다. 쓰다보면 이 게 Direct Graphics 보다 훨씬 편해요. 혹시 아직 Direct Graphics에 정착하신 분들은 저를 믿고 옮겨타세요.
  5. 두번째 플롯 p2를 그립니다. 완전히 다른 데이터죠. SIN 그래프이므로 값의 범위가 달라요. 단 하나 POSITION을 공유하기 때문에 같은 공간에 그리는 것 뿐입니다. /CURRENT 키워드로 ‘현재 창에 덮어 그림’을 설정했구요, AXIS_STYLE=0 이라고 해서 아무 축도 그리지 않게 했습니다. 기존에 그려져 있는 축에 겹쳐지면 보기 안좋으니까요. SIN 데이터는 파랑으로 그렸습니다. 관련 Y축도 파란색으로 해야겠죠.
  6. yaxis2는 AXIS 함수를 사용하는 전형적인 예제입니다. New Graphics에서는 데이터와 축이 자동으로 연동하기 때문에(그려진 플롯에서 마우스 가운데 버튼으로 데이터를 옮기면 축이 같이 따라 움직입니다), YRANGE를 꼼수로 지정해 주는 것은 의미가 없습니다. P2 플롯의 YRANGE를 그대로 가져다 쓰는 게 정석입니다(yrange=p2.yrange). “이 축은 누구랑 연동되느냐”하는 물음의 답변이 TARGET=p2 입니다. Y축을 오른쪽에 그린다는 설정은 매우 직관적이지요. LOCATION을 숫자로 지정해서 축의 위치를 자유롭게 설정할 수도 있어요.
  7. 어쩌다 보니 위쪽 축을 안그렸는데, xaxis2는 이를 그리기 위한 행입니다.
두개의 다른 축을 참조하는 두 개의 데이터

두개의 다른 축을 참조하는 두 개의 데이터

제 미학적 감각이 떨어져서 이런 차트를 그리는 게 아니라는 것은 인정해 주셔야 합니다. 쉽게 하려다 보니 그런 거예요.

참고: 전통적인 Direct Graphics에서는 AXIS 프로시저와 /SAVE 키워드로 새로운 데이터 영역을 정의했습니다. New Graphics는 이 방식을 따르지 않습니다. 축의 범위가 절대적인 것이 아니예요. 플롯 위에서 마우스 휠을 이용하면 데이터 영역 주밍도 될 정도니까요.