axis 관련 질문드립니다.

게시판 IDL Q&A axis 관련 질문드립니다.

4 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #1921 Reply
      inmyta27
      회원

      제가 막대그래프와 실선 그래프를 함께 나타내고 싶어 다음과 같이 barplot과 plot 함수를 가지고 다음과
      같이 그림을 그렸습니다.

      결론적으로 묻고 싶은 질문은 y축에 이중축을 만들고 싶습니다. 해서
      axis 함수를 사용하였는데 y축도 생기고 y축 title 까지 생기는데 그 y축 범위가 아래 q=plot(x,….)에 나오는 yrange=[0,60]을 따라 나타납니다.

      아래 bp2, q,a,b는 왼쪽 y축을 따르고
      d,e,f는 오른쪽 y축 범위를 따랐으면 좋겠는데 그게 잘 안되서 문의드립니다.

      =======코드===========
      bp2=barplot(aws_rr,fill_color=’red’,color=’red’, xthick=2.0, ythick=2.0, name=’AWS’)

      q=plot(x, before_rr[ok], color=’blue’, thick=2, name=’Before BC’,$
      xthick=1.5, ythick=1.5,xrange=[0,aa-1],yrange=[0,60],/nodata,/overplot)

      a=plot(x,before_rr[ok], color=’blue’,thick=2,name=’Befer BC’,/overplot)
      b=plot(x,after_rr[ok], color=’green’,thick=2,name=’After BC’,/overplot)

      ;=== accumulated rainfall plot ==
      d=plot(x,aws_acu,color=’red’,linestyle=1,thick=2,name=’Acu. AWS [mm]’,/overplot)
      e=plot(x,radar1_acu, color=’blue’,linestyle=1,thick=2,name=’Acu. Before BC [mm]’,/overplot)
      f=plot(x,radar2_acu, color=’green’,linestyle=1,thick=2,name=’Acu. After BC [mm]’,/overplot)

      yaxis=axis(‘Y’,location=’right’,title=’Accumulated rainfall [mm]’, axis_range=[0,100])

      l=legend(target=[bp2,a,b,d,e,f],position=[50,58],/data)

    • #1922 Reply
      jhlee
      Keymaster

      2번째 축 생성 시 최초 축과의 비교? 값이 들어가게 됩니다. 키워드는 COORD_TRANSFORM 입니다.
      IDL 도움말에서 확인하실 수 있습니다.
      위 경우 yaxis=axis(‘Y’,location=’right’,title=’Accumulated rainfall [mm]‘, axis_range=[0,100], COORD_TRANSFORM=[0, 100./60]) 정도가 될 것 같습니다.

    • #1923 Reply
      Jonghyuk
      회원

      OVERPLOT 키워드와 CURRENT 키워드는 겹쳐 그리기의 핵심이 되는 두가지 키워드인데, 사실상 전혀 다른 목적으로 사용됩니다.
      OVERPLOT은 기존의 그래픽에 대한 좌표체계를 그대로 따르며 데이터 포인트 만을 추가하는 겁니다.
      CURRENT는 기존에 생성되어 있는 그래픽을 무시하고, 새로운 좌표체계로 그림을 생성하되, 창(Window)만 기존의 창을 이용하는 것입니다.

      axis() 함수를 이용하여 AXIS를 생성하고, 특정 데이터가 새로 생성된 AXIS를 따르게 할 때는 제약이 있습니다. 데이터와 AXIS가 기존 생성된 데이터와 y=a+bx 의 관계를 가지고 있어야 한다는 것입니다. 즉, offset과 scale의 차이만 있을 뿐 사실은 동종의 데이터여야 한다는 제약이 있습니다. 이는 섭씨 온도와 화씨 온도라든지, CALVAL 전의 값과 CALVAL 후의 값 같은 두 종류의 축을 생성할 때 더 편하고 유용한 방법입니다.

      그런데, 만일 풍향과 풍속 같은, 같은 차트에 올려야 되는 데이터이긴 하지만 사실상 아무런 relation이 없는 데이터라면 AXIS와 OVERPLOT으로는 해결할 수 없는 문제입니다. 이 때는, 정확히 같은 위치에 새로운 차트를 겹쳐 그리는 것이 답입니다. 그리고 이 때, CURRENT 키워드를 이용합니다.(POSITION이나 MARGIN 같은 키워드를 사용하면 정확히 같은 위치를 지정할 수 있습니다).

      올려 주신 코드로는 두가지 축이 y=a+bx의 관계가 있는지 없는지 확인하기 어려운데요, 관계가 있다면 앞의 답변과 같은 COORD_TRANSFORM 키워드를 이용한 AXIS로 해결하시는 것이 맞고, 관계가 없다면 CURRENT 키워드를 이용해서 새 차트를 덮어 그리는 것이 맞습니다.

    • #1924 Reply
      inmyta27
      회원

      답변 너무 감사합니다. 제가 올린 코드에서 데이터는
      두가지 축에는 서로 관계가 없기 때문에 말씀해주신것처럼 current 함수를 사용하는게 좋을꺼 같은데
      current에 대해 잘 몰라서
      axis 축을 따르고 싶은 데이터는 그럼

      yaxis=axis(…………..) 이후에
      d=plot(……………../current) 을 하면 d는 yaxis 축을 따르게 되는 건가요?

    • #1940 Reply
      Jonghyuk
      회원

      답변을 대신할 관련 예제를 새 글로 올렸습니다.

4 답변 글타래를 보이고 있습니다
'axis 관련 질문드립니다.'에 답변달기
글쓴이 정보: