推荐一个IDL小程序,用来画谱线的

推荐一个IDL小程序,用来画谱线的

有时候你需要用IDL画一个谱线图,也就是使用
复制内容到剪贴板
代码:
plot, x, y, psym=10
但同时你又想要填充这个谱线,这样看起来更加美观。那么你可以使用这个脚本 (fillspec.pro):
复制内容到剪贴板
代码:
;+
; NAME:
;   FILLSPEC
;
; CALLING SEQUENCE:
;   fillspec, x, y, continuum, psym=, linecolor=, fillcolor=
;
; INPUTS:
;   x, y, continuum. The velocity/frequency/wavelength, flux value and
;   the continuum value.
;
; KEYWORD INPUTS:
;   psym      =: Set the plotpsym. For plotting the spectrum, we use 10.
;   linecolor =: Set the spetrum stroke color.
;   fillcolor =: Set the color that fill the space between flux value
;                and the continuum value.
;
; KEYWORDS SWITCHES:
;   ...
;
; OUTPUTS:
;   ...
;
; EXAMPLES:
;    IDL> x = ...          ; input the velocity/frequency/wavelength array
;    IDL> y = ...          ; input the corresponding flux value array
;    IDL> continuum = ...  ; input the corresponding continuum value (array)
;    IDL> fillspec, x, y, continuum, psym=10, linecolor=220, fillcolor=50
;
; SIDEEFFECT:
;   ...
;
; RESTRICTIONS:
;   (Please check if all the variables are in the same order)
;
;-


PRO fillspec, x0, y0, cont0, LINECOLOR=LINECOLOR, psym=psym, FILLCOLOR=FILLCOLOR
loadct=5

x_sort=sort(x0)
x=x0(x_sort)
y=y0(x_sort)
n=n_elements(x)

OPLOT, x, y, COLOR=LINECOLOR, psym=psym

; Calculate the additional x-values
xnew = (x(0:n-2) + x(1:n-1)) / 2.0D

; Create array containing all x-values
xx = REBIN(xnew, N_ELEMENTS(xnew)*2, /sample)
xx = [min(x), min(x), xx, max(x),max(x)]

; Create array with the corresponding y-values
yy = REBIN(y, N_ELEMENTS(y)*2, /Sample)

; Check if the continuum is a constant
IF (N_ELEMENTS(cont0) NE 1) THEN BEGIN
        cont=cont0(x_sort)
        yy = [cont[0], yy, cont[n_elements(cont)-1]]
ENDIF ELSE BEGIN
        yy = [cont0, yy, cont0]
ENDELSE

y_mi_indx = where(yy LT !Y.CRANGE[0])
y_ma_indx = where(yy GT !Y.CRANGE[1])
IF (y_mi_indx[0] GT 0) THEN yy[y_mi_indx]=FLTARR(N_ELEMENTS(y_mi_indx))+!Y.CRANGE[0]
IF (y_ma_indx[0] GT 0) THEN yy[y_ma_indx]=FLTARR(N_ELEMENTS(y_ma_indx))+!Y.CRANGE[1]



; Fill the histogram plot
POLYFILL, xx, yy, COLOR=FILLCOLOR

; Histogram plot
OPLOT, x, y, COLOR=LINECOLOR, psym=psym

END

TOP

666666666匿名是谁啊需要什么包不?

TOP

不需要额外的包。

TOP

看上去很厉害的样子

[ 本帖最后由 eagle57 于 2015-7-31 06:22 编辑 ]

TOP