“IDL8”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (→画图)  | 
				|||
| (未显示同一用户的20个中间版本) | |||
| 第1行: | 第1行: | ||
'''相对于IDL7.1的IDL8系列的新功能'''  | 
  '''相对于IDL7.1的IDL8系列的新功能'''  | 
||
==函数==  | 
|||
*idl_convert (单位转换,很实用),参见IDLUNIT()   | 
  *idl_convert (单位转换,很实用),参见IDLUNIT()   | 
||
| 第36行: | 第36行: | ||
==画图==  | 
  ==画图==  | 
||
===IDL graphics===  | 
|||
新的图形系统相比于之前的Direct Graphics系统的差别是可以动态的调整图形元素  | 
|||
*P1.window.setcurrent ; 将某个图形窗口设为当前窗口  | 
|||
*errorplot  | 
  |||
:完整的误差棒程序  | 
  |||
*barplot  | 
  |||
*把某个已经存在的图形窗口作为当前窗口画图  | 
|||
 win=getwindows()  | 
|||
 if N_elements(win) gt 0 then begin  | 
|||
 win[0].setcurrent  | 
|||
 win[0].erase  | 
|||
 endif   | 
|||
或者  | 
|||
 a=plot(indgen(10),window_title='P1')  | 
|||
 win=getwindows('P1')  | 
|||
 win.setcurrent  | 
|||
====plot函数====  | 
|||
[[IDL8中的plot函数]]  | 
|||
====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)  | 
|||
 P3=plot(/test,/overplot)  | 
|||
 h1.add,p3   ;自动增加一个标题,不能是数组  | 
|||
====text函数 ====  | 
|||
*和原来的xyouts对应, 直接支持latex符号  | 
|||
* 注意,在多个panel的图上,使用/data定位的时候,要用target关键词制定图形对象  | 
|||
  fn = exp(SIN(FINDGEN(100))^FINDGEN(100))  | 
|||
  p1 = PLOT(fn, LAYOUT = [1, 2, 1], /CURRENT, TITLE = '1')  | 
|||
  p2 = PLOT(fn, LAYOUT = [2, 2, 3], xrange=[25, 42], /CURRENT, TITLE = '2')  | 
|||
  t=text(30,2.5,'test1',/data,target=P1)   | 
|||
  t=text(30,2.5,'text2',/data,target=P2)  | 
|||
====errorplot====  | 
|||
完整的误差棒程序  | 
|||
====barplot====  | 
|||
:棒状图  | 
  :棒状图  | 
||
*boxplot  | 
  |||
====boxplot====  | 
|||
*polarplot  | 
  |||
====polarplot====  | 
|||
:极坐标  | 
  :极坐标  | 
||
*vector  | 
  |||
====vector====  | 
|||
:画矢量图(箭头)  | 
  :画矢量图(箭头)  | 
||
*streamline  | 
  |||
====symbol====  | 
|||
:画符号,支持latex  | 
  :画符号,支持latex  | 
||
====colorbar====  | 
|||
*生成图形的code [http://www.harrisgeospatial.com/docs/generatecode.html]  | 
  |||
:画颜色棒  | 
|||
:p.GenerateCode, 'mycode.pro'   | 
  |||
 cb=colorbar(rgb_table-4,ticklen=0,range=[0,20],position=[0.15, 0.88, 0.45, 0.93],title='R/Re')  | 
|||
====axes====  | 
|||
*save  | 
  |||
*AXES可以直接在image上画坐标轴  | 
|||
 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  | 
  |||
===image===  | 
|||
*legend  | 
  |||
*函数  | 
|||
 a = findgen(11)  | 
  |||
:RGB_VALUE : 选择color bar  | 
|||
 b = 20./(a+1)^2  | 
  |||
:max:可以用最大值归一化  | 
|||
 p1 = PLOT(a, b, '4', /HISTOGRAM, NAME='Theoretical',  /YLOG, YRANGE=[0.01,100])  | 
  |||
:axis: 图像是否显示坐标轴  | 
|||
 p2 = PLOT(RANDOMU(-1, 11), '4r', NAME='Experimental', TRANSPARENCY=50, /HISTOGRAM, /OVERPLOT)  | 
  |||
:p.axes 可定制  | 
|||
 h = LEGEND(POSITION=[9,50],label=['haha','papa'] /DATA)  | 
  |||
       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']  | 
|||
*画多个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关键词,不需要自己设计  | 
  |||
*直接支持latex符号,text函数  | 
  |||
*AXES可以直接在image上画坐标轴  | 
  |||
===地图相关===  | 
  ===地图相关===  | 
||
2017年3月31日 (五) 06:01的最新版本
相对于IDL7.1的IDL8系列的新功能
函数
- idl_convert (单位转换,很实用),参见IDLUNIT()
 
变量
- 变量的运算 [1]
 
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系统的差别是可以动态的调整图形元素
- P1.window.setcurrent ; 将某个图形窗口设为当前窗口
 
- 把某个已经存在的图形窗口作为当前窗口画图
 
win=getwindows() if N_elements(win) gt 0 then begin win[0].setcurrent win[0].erase endif
或者
a=plot(indgen(10),window_title='P1')
win=getwindows('P1')
win.setcurrent
plot函数
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) P3=plot(/test,/overplot) h1.add,p3 ;自动增加一个标题,不能是数组
text函数
- 和原来的xyouts对应, 直接支持latex符号
 - 注意,在多个panel的图上,使用/data定位的时候,要用target关键词制定图形对象
 
fn = exp(SIN(FINDGEN(100))^FINDGEN(100)) p1 = PLOT(fn, LAYOUT = [1, 2, 1], /CURRENT, TITLE = '1') p2 = PLOT(fn, LAYOUT = [2, 2, 3], xrange=[25, 42], /CURRENT, TITLE = '2') t=text(30,2.5,'test1',/data,target=P1) t=text(30,2.5,'text2',/data,target=P2)
errorplot
完整的误差棒程序
barplot
- 棒状图
 
boxplot
polarplot
- 极坐标
 
vector
- 画矢量图(箭头)
 
symbol
- 画符号,支持latex
 
colorbar
- 画颜色棒
 
cb=colorbar(rgb_table-4,ticklen=0,range=[0,20],position=[0.15, 0.88, 0.45, 0.93],title='R/Re')
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