顯示具有 IDL Tips 標籤的文章。 顯示所有文章
顯示具有 IDL Tips 標籤的文章。 顯示所有文章

2009-12-25

在一個檔案中畫多張圖

因為版面因素,或是方便比較,我們常會需要在一個圖檔中畫好幾張圖。IDL 也可以提供這個功能,利用一個環境變數 !P.multi 就可以解決。例如:
  • !P.multi=[0,2,2,0,1]
裡面有五個參數。

第一個參數是「畫完這張圖之後,還要再畫幾張圖」(應該是吧),這個在畫 non-symmetrical arrangement 的時候才會設到 1 以上,不然一般狀況下是 0。
第二個參數是這個檔案裡要放幾個 columns 的影像。
第三個參數是這個檔案裡要放幾個 rows 的影像。
第四個參數是在 z 方向,要堆疊幾層影像 (只有在有 3D coordinate system 才會使用)
最後一個參數是你接下來的影像順序,是要由 row 的方向開始排 (0) 或是由 column 的方向開始排 (1)

有了這個指令,就可以簡單地畫多個圖檔在一個檔案中了。當然,圖的位置還可以由 !P.position 來微調,畫圖區域也可以用 !P.region 來調整。

2009-12-16

畫 Multple Axis 的圖

如果想把不同組的資料畫到同一張圖上,並清楚非示兩組資料的不同,我們常常會需要畫不同的 y軸。而 IDL 也可以做這件事。


例如上面這張圖,這是我修 HHT 概論時的期末作業會用到的一張圖,資料點是由 1856 年開始全球的平均氣溫,做完 EEMD 拆解之後,如果把 residual 當作是溫度上昇的趨勢,則可以畫出圖中的紅線。而把這個趨勢對時間做一次微分,可以得到溫度上昇的速率,也就是藍色線。但由於這兩者的尺度差太大,所以需要多一條座標軸。方法如下:
首先要要畫第一張圖 (data)

  • plot,t,x,ystyle=8,xtitle='year',ytitle='Temperature',position=[0.1,0.1,0.9,0.95],xrange=[1850,2015],xstyle=1
其中 ystyle=8 就是把右邊的 y軸消掉,先留空白。再來,把 trend 也畫上去:
  • oplot,t,trend,color=1,thick=3
接下來就是要做出右邊的 y 軸了。要用 axis 的指令:
  • axis,yaxis=1,yrange=[-0.001,0.011],/save,ytitle='Temperature Increasing Rate',ystyle=1
axis 就是畫出座標軸的意思,也可以另外加上 title,這樣就成功了。最後,再把另一組 data (溫度上升趨勢的微分) 畫上去:
  • oplot,t,ddt,color=2,thick=3
當然,圖中還有一些 Legend,這個是手動畫上去和手動寫字上去的。IDL 似乎沒辦法自動幫你畫 Legend?

2008-10-21

IDL Tips: contour

在 IDL 中, contour 這個指令可以畫等高線圖。指令如下:
contour,z

在這裡,z是一個二維的陣列,也就是z(x,y),如果只用上面的指令,那就是畫出z對陣列的 index 的整原高線圖。當然,如果你另有x和y的座標,可以用下面的指令:
contour,z,x,y

不過,有時候我們會遇到z對x、y的散佈值。也就是我們得資料中,可能有不同的x、y值對應到的z,在這裡z和x、y就只是一個一維的向量 (通常我們讀檔的時候都只是這樣...),而且原始資料的排列順序不一定是按照正確的格式,這時候就要用
contour,z,x,y,/irregular

加了 ",/irregular" 這個 keyword 之後,就能對付這種情形了。
此外,還有一個 keyword "nlevel" 也很常用,這是指定等高線圖總共要幾階的。例如我們要 分為12階,就用
contour,z,x,y,nlevel=12

最後,下面是一張 4U 1820-30 的 dynamic power spectrum 的 contour plot,就是用 IDL 畫出來的。當然,contour 這個指令可用幾乎所有的 plot keyword,例如 linestyle、xtitle、title... 等。