“IDL8”的版本间差异

来自Shiyin's note
跳到导航 跳到搜索
第45行: 第45行:
===IDL graphics===
===IDL graphics===
新的图形系统相比于之前的Direct Graphics系统的差别是可以动态的调整图形元素
新的图形系统相比于之前的Direct Graphics系统的差别是可以动态的调整图形元素

*plot函数
====plot函数====
p = PLOT(data, '-r2+')
p = PLOT(data, '-r2+')
;Tokens in the Format string represent values of the LINESTYLE, COLOR, THICK, and SYMBOL properties.
;Tokens in the Format string represent values of the LINESTYLE, COLOR, THICK, and SYMBOL properties.

:axes
*linestyle

*axes
p = PLOT(/TEST)
p = PLOT(/TEST)
ax = p.AXES
ax = p.AXES
第57行: 第61行:
ax[0].showtext=0 ;隐藏坐标上的数字和title,画紧凑直方图很有用
ax[0].showtext=0 ;隐藏坐标上的数字和title,画紧凑直方图很有用


*text函数 和原来的xyouts对应


*画多个panel的时候可以用layout关键词,而且可以动态调整
*errorplot
fn = exp(SIN(FINDGEN(100))^FINDGEN(100))
:完整的误差棒程序
w1 = WINDOW()
p1 = PLOT(fn, LAYOUT = [1, 2, 1], /CURRENT, TITLE = '1')
p2 = PLOT(fn, LAYOUT = [2, 2, 3], xrange=[25, 42], /CURRENT, TITLE = '2')
p3 = PLOT(fn, LAYOUT = [2, 2, 4], xrange=[50, 60], /CURRENT, TITLE = '3')


*barplot
:棒状图


*colorbar 用法更自由,target关键词,不需要自己设计
*boxplot

*polarplot
:极坐标

*vector
:画矢量图(箭头)

*streamline

*symbol
:画符号,支持latex


*生成图形的code [http://www.harrisgeospatial.com/docs/generatecode.html]
*生成图形的code [http://www.harrisgeospatial.com/docs/generatecode.html]
第95行: 第89行:
p[2].Save, 'data1.pdf', /APPEND, /CLOSE
p[2].Save, 'data1.pdf', /APPEND, /CLOSE



*legend
====legend====
a = findgen(11)
a = findgen(11)
b = 20./(a+1)^2
b = 20./(a+1)^2
第102行: 第97行:
h = LEGEND(POSITION=[9,50],label=['haha','papa'] /DATA)
h = LEGEND(POSITION=[9,50],label=['haha','papa'] /DATA)


====text函数 ====
*画多个panel的时候可以用layout关键词,而且可以动态调整
和原来的xyouts对应, 直接支持latex符号
fn = exp(SIN(FINDGEN(100))^FINDGEN(100))
w1 = WINDOW()
p1 = PLOT(fn, LAYOUT = [1, 2, 1], /CURRENT, TITLE = '1')
p2 = PLOT(fn, LAYOUT = [2, 2, 3], xrange=[25, 42], /CURRENT, TITLE = '2')
p3 = PLOT(fn, LAYOUT = [2, 2, 4], xrange=[50, 60], /CURRENT, TITLE = '3')


====errorplot====
*colorbar 用法更自由,target关键词,不需要自己设计
完整的误差棒程序
*直接支持latex符号,text函数

====barplot====
:棒状图

====boxplot====

====polarplot====
:极坐标

====vector====
:画矢量图(箭头)

====symbol====
:画符号,支持latex


====axes====
*AXES可以直接在image上画坐标轴
*AXES可以直接在image上画坐标轴



2017年1月4日 (三) 13:32的版本

相对于IDL7.1的IDL8系列的新功能

功能

  • python bridge
  • jupyter(pyhton), IDL kernel, 参见[1]
  1. 将复制到<IDL_DIR>/lib/bridges/kernels/IDL/kernel.json 复制到~/share/jupyter/kernels/IDL
  2. 设置,PATH包含IDL的可执行命令文件夹
  3. 设置环境变量PYTHON包含IDL和PYTHON的可执行命令文件夹

函数

  • idl_convert (单位转换,很实用),参见IDLUNIT()

变量

  • 变量的运算 [2]
var = RANDOMU(seed, 200, 100)
PRINT, var.length
PRINT, var.ndim
PRINT, var.dim
PRINT, var.typecode
PRINT, var.typename
PRINT, var1.Mean()
PRINT, var1.Total()
var2 = var1.Sort()
  • biginteger
任意位数的整数

系统变量

  • !const
常用物理常数


函数

  • FOLDERWATCH
监控文件夹
  • CODE_COVERAGE
监控那些CODE被执行 (选择判断)
  • FFT Power Spectrum



画图

IDL graphics

新的图形系统相比于之前的Direct Graphics系统的差别是可以动态的调整图形元素

plot函数

p = PLOT(data, '-r2+')
;Tokens in the Format string represent values of the LINESTYLE, COLOR, THICK, and SYMBOL properties. 
  • linestyle
  • axes
p  = PLOT(/TEST)
ax = p.AXES
ax[0].TITLE = 'X axis'
ax[1].TITLE = 'Y axis'
ax[2].HIDE = 1 ; hide top X axis
ax[3].HIDE = 1 ; hide right Y axis
ax[0].showtext=0 ;隐藏坐标上的数字和title,画紧凑直方图很有用


  • 画多个panel的时候可以用layout关键词,而且可以动态调整
 fn = exp(SIN(FINDGEN(100))^FINDGEN(100))
 w1 = WINDOW()
 p1 = PLOT(fn, LAYOUT = [1, 2, 1], /CURRENT, TITLE = '1')
 p2 = PLOT(fn, LAYOUT = [2, 2, 3], xrange=[25, 42], /CURRENT, TITLE = '2')
 p3 = PLOT(fn, LAYOUT = [2, 2, 4], xrange=[50, 60], /CURRENT, TITLE = '3')


  • colorbar 用法更自由,target关键词,不需要自己设计
  • 生成图形的code [3]
p.GenerateCode, 'mycode.pro'
  • save
可以直接把图保存成文件
 p = OBJARR(3)
 ; Create three plots with random data
 FOR i = 0, 2 DO BEGIN
  t = 0.1*FINDGEN(50)
  y = SMOOTH(RANDOMU(seed,50), 5)
  p[i] = PLOT(t,y,'b', SYMBOL='D', TITLE='Observation'+STRING(i+1))
 ENDFOR
; Build the multi-page PDF file, one page at a time
 p[0].Save, 'data1.pdf', /APPEND
 p[1].Save, 'data1.pdf', /APPEND
 p[2].Save, 'data1.pdf', /APPEND, /CLOSE


legend

 a = findgen(11)
 b = 20./(a+1)^2
 p1 = PLOT(a, b, '4', /HISTOGRAM, NAME='Theoretical',  /YLOG, YRANGE=[0.01,100])
 p2 = PLOT(RANDOMU(-1, 11), '4r', NAME='Experimental', TRANSPARENCY=50, /HISTOGRAM, /OVERPLOT) 
 h = LEGEND(POSITION=[9,50],label=['haha','papa'] /DATA)

text函数

和原来的xyouts对应, 直接支持latex符号

errorplot

完整的误差棒程序

barplot

棒状图

boxplot

polarplot

极坐标

vector

画矢量图(箭头)

symbol

画符号,支持latex


axes

  • AXES可以直接在image上画坐标轴

image

  • 函数
RGB_VALUE : 选择color bar
max:可以用最大值归一化
axis: 图像是否显示坐标轴
p.axes 可定制
      p=image(Agez,position=[0.15,0.1,0.9,0.5],max=max(Agez),RGB='rainbow',axis=1,$
               xtitle='Age (Gy)',ytitle='$Z/Z_\odot$',/current)
       ax=p.axes
       ax[0].tickvalues=[0,2,4,7,9,11,13,15,17,19]
       ax[0].tickname=['0.001','0.01','0.1','1','3','5','7','9','11','13']
       ax[1].tickname=['0.005','0.002','0.02','0.04','1','2.5']


地图相关

  • map (可以投影天球)
mymap = MAP('hammer', FILL_COLOR="light_blue")
; Convert from longitude/latitude to meters
longitudes = [-83.02, 88.50]
latitudes = [42.42, 47.17]
xy = mymap.MapForward(longitudes, latitudes)
; Convert back to longitude/latitude and plot
EXPAND, xy, 2, 20, xycoordinates
lonlat = mymap.MapInverse(xycoordinates)
p = PLOT(lonlat[0,*], lonlat[1,*], 'rS',   /OVERPLOT, /SYM_FILLED)

数组运算

  • array_equal