IDL 8.2.2為IDL圖形進行了一些功能改進,新增了幾個函式過程和一個系統變數,提供了Widget元件程式設計的新特性,極大地提升瞭如PLOT等函式的啟動速度。並簡化了ENVI自定義工具的建立。工作臺編輯器的功能有了改進和增加。
1. 新增IDL技巧專題
在IDL8.2.2幫助中新增了一個技巧專題。此專題在以後會一直進行擴充,可以幫助使用者編寫的程式更加簡單高效。
2. 新增函式
2.1 BOXPLOT
現在可以使用BOXPLOT函式繪製箱線圖。如圖所示,提供一個N列5行的陣列(其中N為繪製圖形個數),每一列對應一個圖形,5個元素分別對應圖中箭頭所示位置的Y值。
你可以自定義輸入陣列的值,也可以使用CREATEBOXPLOTDATA函式自動生成。
圖:BoxPlot函式示例
2.2 CREATEBOXPLOTDATA
顧名思義,CreateBoxPlotData函式是為BoxPlot函式建立資料的。自動計算輸入陣列每一列的最小值(排除可能的異常值)、下四分之一值、中值、上四分之一值、最大值(排除可能的異常值)。
bike_mph = [ $
[12.2, 16.2], $
[12.1, 16.4], $
[10.7, 16.9], $
[11.6, 17.0], $
[10.2, 16.5], $
[10.9, 16.1], $
[11.8, 17.1], $
[10.9, 100.0], $ ;存在一個異常值100.0,看結果已經排除此異常值,最大值為17.50
[12.4, 16.8], $
[12.9, 16.9], $
[13.1, 17.5], $
[13.0, 17.4]]
bpd = CREATEBOXPLOTDATA(bike_mph, MEAN_VALUES=means, OUTLIER_VALUES=outliers)
PRINT, bpd
10.200000 16.100000
10.900000 16.424999
11.950001 16.900000
12.775000 17.324999
13.100000 17.500000
2.3 IMAGE_THRESHOLD
IMAGE_THRESHOLD函式返回一個二值影像,大於閾值則為1,小於閾值則為0。可選的自動閾值演算法有:Isodata、Otsu、Moments、Maxentropy、Minerror和Mean。如圖所示,上圖為原始影像,下圖為返回的二值影像。
圖:IMAGE_THRESHOLD函式示例
2.4 SCATTERPLOT和SCATTERPLOT3D
SCATTERPLOT和SCATTERPLOT3D函式可以繪製二維和三維散點圖。
圖:SCATTERPLOT函式示例
2.5 TIC和TOC
TIC和TOC程式可以獲取IDL程式的執行時間。TIC程式可以被用作過程或函式。當TIC被當作過程呼叫時,TIC和TOC可以輸出被呼叫之間的執行時間。當TIC被用作函式呼叫時,TOC程式可以計算TIC指定過程的執行時間。這樣便可以計運算元程式和迴圈內的執行時間。TIC和TOC程式同樣可以被用來啟動和禁止IDL程式碼分析器。
3. 其他更新內容
新增 !CONST 系統變數
!CONST系統變數格式為IDL結構體,包含了常用的物理常數。例如,使用裡德伯常量計算氫原子躍變放射出的光波長。
首先核查裡德伯常量的值:
PRINT, !CONST.me*!CONST.ev^4/(8*!CONST.eps0^2*!CONST.h^3*!CONST.c)
PRINT, !CONST.Rydberg
IDL prints:
10973732.
10973732.
現在計算從n=2到基態的轉換:
PRINT, 1e9/(!CONST.Rydberg*(1 - 1./4)), " nm"
IDL prints:
121.50227 nm
獲取隨機數演算法改進
RANDOMU和RANDOMN函式現在使用Mersenne Twister演算法來生成隨機數。Mersenne Twister演算法相對舊版隨機數生成器來說,是一個重大改進。
如果想要使用舊版演算法,可以使用RAN1關鍵字。
Graphics: CURRENT關鍵字升級
CURRENT關鍵字升級了,使用者可以指定此關鍵字等於已經存在的圖形視窗,則指定的圖形視窗自動變為當前視窗。
Graphics: 帶投影圖片顯示改進
當顯示影像具有地圖投影時,IDL自動設定影像的地圖範圍。同樣可以新增顯示Box Axes,而不需要手動計算範圍。
圖:顯示影像在某地圖投影下,可以自動新增Box Axes
Graphics: 顯示地圖視界
現在可以顯示所有地圖投影型別的邊界。MAP和MAPGRID函式有三個相關屬性:HORIZON_COLOR、HORIZON_LINESTYLE和HORIZON_THICK。例如:
; Create a map using the interrupted Goode projection.
mGoode = MAP('Interrupted Goode', FILL_COLOR='light blue', $
HORIZON_COLOR='red', HORIZON_THICK=3, TITLE='Interrupted Goode')
mc = MAPCONTINENTS(/FILL_BACKGROUND, FILL_COLOR='gray')
圖:地圖視界顯示示例
Graphics: POSITION屬性
在所有圖形物件中新增了新的POSITION屬性。在之前的版本,只能對“main”影像函式使用POSITION屬性,例如PLOT、CONTOUR。在建立時,POSITION可以被設定為含有4個元素的向量,[X1, Y1, X2, Y2],分別對應了左下角和右上角的座標。如果設定為2個元素的向量,則為要顯示圖形的中心點位置。
Graphics: 速度提升
所有圖形函式的啟動速度有了極大的提升。其中,利用硬體渲染明顯提升了PLOT函式的速度,特別是在繪製大資料量的點時。例如:
;IDL8.2.2版本測試程式碼
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & TIC & p = PLOT(x) & TOC & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & TIC & PLOT, x & TOC & WDELETE & ENDFOR
;IDL8.0及之前版本測試程式碼
n = 1e6
x = RANDOMU(seed, n)
PRINT, 'Graphics functions:'
FOR i=0,2 DO BEGIN & start = systime(1) & p = PLOT(x) & print, systime(1)-start & p.CLOSE & ENDFOR
PRINT, 'Direct graphics:'
FOR i=0,2 DO BEGIN & start = systime(1) & PLOT, x & print, systime(1)-start & WDELETE & ENDFOR
IDL8.2.2 prints:
Graphics functions:
% Time elapsed: 2.3860002 seconds.
% Time elapsed: 2.1719999 seconds.
% Time elapsed: 2.1790001 seconds.
Direct graphics:
% Time elapsed: 0.73799992 seconds.
% Time elapsed: 0.64499998 seconds.
% Time elapsed: 0.63299990 seconds.
IDL8.0 prints:
Graphics functions:
17.503000
7.6090000
7.4710000
Direct graphics:
0.67799997
0.64600015
0.65400004
IDLgrPlot: 新的直方圖樣式
使用IDLgrPlot物件時,設定HISTOGRAM = 2可以超出資料的範圍。或設定HISTOGRAM = 3,將水平線的起始點落在每一個X位置,而不是中心位置。
PLOT和BARPLOT: 新的直方圖樣式
PLOT和BARPLOT函式均新增了新的HISTOGRAM屬性。區別在於直方圖的起始點位置不同。如下面的例子所示。
h = HISTOGRAM(5*RANDOMU(1,25), BINSIZE=1, MIN=0.0, LOCATIONS=loc)
ex = {THICK:2, XRANGE:[-0.5,5.5], YRANGE:[0,10], $
XMINOR:0, XTICKLEN:0.02, YMINOR:0, YTICKLEN:0.02}
p1 = PLOT(loc, h, /STAIRSTEP, LAYOUT=[2,2,1], $
_EXTRA=ex, XTITLE='Plot Stairstep')
p2 = PLOT(loc, h, /HISTOGRAM, LAYOUT=[2,2,2], $
_EXTRA=ex, /CURR,XTITLE='Plot Histogram')
p3 = BARPLOT(loc, h, LAYOUT=[2,2,3], _EXTRA=ex, $
/CURR,XTITLE='Barplot Default')
p4 = BARPLOT(loc, h, LAYOUT=[2,2,4], _EXTRA=ex, $
/CURR, /HISTOGRAM, XTITLE='Barplot Histogram')
圖:PLOT和BarPlot新的直方圖樣式
ROUTINE_FILEPATH函式改進
如果呼叫時不輸入任何引數,將自動返回當前原始碼檔案的完整路徑。這在讀取與原始碼檔案相同路徑下的資料時非常有用。
工作臺編輯器自動補全塊語句
當使用塊語句時,輸入語句最後一詞為“begin”時,按回車會自動補齊“end”。支援的塊語句包括:IF/ENDIF、FOREACH/ENDFOREACH、 FOR/ENDFOR、ELSE/ENDELSE、WHILE/ENDWHILE、 CASE/ENDCASE、SWITCH/ENDSWITCH和REPEAT/ENDREP。自動補全的“end”與“begin”具有相同的格式(如全大寫、小寫、首字母大寫等)。
如,當輸入“IF 1 then begin”後回車,自動在後邊補齊ENDIF。
可以在IDL首選項中設定是否自動補全。如圖中紅框位置。
圖:設定是否自動補全塊語句
工作臺編輯器自動格式化
在IDL工作臺的編輯器內貼上一行或多行語句時,編輯器自動應用預設的格式。相對於之前版本中,等同於貼上程式碼後點選原始碼→格式。
可透過IDL首選項中設定是否使用此功能,如上圖中藍色框中所示位置。