User Tools

Site Tools


internal:administration:idl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
internal:administration:idl [2026/03/19 20:55] – [contour] janinternal:administration:idl [2026/04/28 08:26] (current) – [interpolation] jan
Line 626: Line 626:
   * As matrix operations are faster than for-loops this may speed up your code a lot ...   * As matrix operations are faster than for-loops this may speed up your code a lot ...
  
 +  * Alternatively one may use **rebin** , but note that rebin uses bilinear interpolation (sample=0) or nearest neigbor (sample=1) and accordingly might be a bit slower 
 +
 +  x = fltarr(Nx)
 +  y = fltarr(Ny)
 +  xx = rebin( x, Nx, Ny, sample=1 )
 +  yy = transpose(rebin( y, Ny, Nx ))
 +
 +  
 ==== procedure names ==== ==== procedure names ====
  
Line 815: Line 823:
   ss[0] = 'wind speed'   ss[0] = 'wind speed'
   ss[1] = 'm/s'   ss[1] = 'm/s'
 +
 +An array of strings can be also be splitted element by element, but only from Idl version 8. onwards. 
 +The result will be a  [[https://www.nv5geospatialsoftware.com/docs/list.html|LIST-Object]] , which might be converted to an array by using its method [[https://www.nv5geospatialsoftware.com/docs/list.html#ToArrayMethod|List::toArray()]] (note the brackets!).
 +
 +  s = [ 'a=b', 'c=d', 'e=f' ]
 +  sL = STRSPLIT( s, '=', /ex, count=N )
 +  sA = (STRSPLIT( s, '=', /ex, count=N )).toArray(  ) ; equal to sA = sL.toArray()
 +
 +Result %%sL%% will be a %%LIST%% object with N elements, and every entry of sL an array of strings with elements accorrding to the result fo strsplit.
 +Parameter %%N%% will be an array with the number of splits that could be made per element.
 +The conversion %%sL.toArray()%% works only if every entry in sL has the same number of elements.
 +The %%sA%% array would allow you to search for certain values in the array by using the where functions - eg:
 +
 +  ia = where( sA[*,0] eq 'a', Na )
 +
 +But you could also try to use the %%WHERE%% method of the %%LIST%% object ...
 +
  
  
Line 821: Line 846:
  
  
-filenames can be separated into path and name by +filenames can be separated into path and name with 
-  file_dirname( <path to file> ) +  f_dn = file_dirname( <path to file> ) 
-  file_basename( <path to file> )+  f_bn = file_basename( <path to file> ) 
 + 
 +where the dirname will have no '/' charcater. 
 + 
 +You may use strsplit to strip or get the 'filename extension' - the part of the filename after the last dot: 
 +  f_ext = (STRSPLIT( f_bn, '.', /ex, count=N ))[N-1] 
 +  f_bnx = STRJOIN((STRSPLIT( f_bn, '.', /ex, count=N ))[0:N-2],'.'
  
 ==== formatted output ==== ==== formatted output ====
Line 1769: Line 1801:
     xrange = [ 0.5 * hour, 2*1e6 ], $     xrange = [ 0.5 * hour, 2*1e6 ], $
     /xlog, $     /xlog, $
-    xticks = N_ticks-1, $  ; holy IDL - why do you need things like this ?+    xticks = N_ticks-1, $  ; xticks is the number of //intervals// not ticks!,  holy IDL - why do you need things like this ?
     xtickname = x_tiknams, $     xtickname = x_tiknams, $
     xtickv    = x_tikvals, $     xtickv    = x_tikvals, $
Line 3111: Line 3143:
     /path_data_coords, $ ; want to have data coordinates in data_xy instead of normalized coo's.     /path_data_coords, $ ; want to have data coordinates in data_xy instead of normalized coo's.
     /path_double, $ ; you need double if eg x is time as julian day     /path_double, $ ; you need double if eg x is time as julian day
 +    /closed, $ ; close pathes along outline of the plotting area when isolines leave it.
     /overplot ; avoid contour to rescale the axes - if you already had a plot or contour plot you want to reuse     /overplot ; avoid contour to rescale the axes - if you already had a plot or contour plot you want to reuse
  
Line 3119: Line 3152:
  
   for i = 0, n_elements(path_info)-1 do begin   for i = 0, n_elements(path_info)-1 do begin
-    path_info_i = path_info[i] +    ii = path_info[i].offset + lindgen(path_info[i].N)
-    ii = path_info_i.offset + lindgen(path_info_i.N)+
     polyfill, path_xy[0,ii], path_xy[1,ii], /line_fill, spacing=0.7, orientation=i*5, noclip=0     polyfill, path_xy[0,ii], path_xy[1,ii], /line_fill, spacing=0.7, orientation=i*5, noclip=0
   endfor ; i   endfor ; i
Line 3126: Line 3158:
 You could also use polyfill to put a byte pattern or wrap an image between the isolines ... You could also use polyfill to put a byte pattern or wrap an image between the isolines ...
  
 +  c = 255
 +  pattern = [ $
 +      [ 0, 0, 0, 0, 0, 0, 0 ], $
 +      [ 0, 0, 0, c, 0, 0, 0 ], $
 +      [ 0, 0, c, c, c, 0, 0 ], $
 +      [ 0, c, c, c, c, c, 0 ], $
 +      [ 0, 0, c, c, c, 0, 0 ], $
 +      [ 0, 0, 0, c, 0, 0, 0 ], $
 +      [ 0, 0, 0, 0, 0, 0, 0 ]  $
 +    ]
 +  for i = 0, n_elements(path_info)-1 do begin
 +    ii = path_info[i].offset + lindgen(path_info[i].N)
 +    polyfill, path_xy[0,ii], path_xy[1,ii], pattern=pattern, transparent=c-1, noclip=0, color='ff00ff'x
 +  endfor ; i
 +
 +But i do not understand how the transparent thing works - in this example it does not work. And if i understood it right i need to provide IMAGE_COORD, 
 +see  NV5 help for [[https://www.nv5geospatialsoftware.com/docs/POLYFILL_Procedure.html#dg_routines_3604229493_877795|POLYFILL]].
  
 === color bar === === color bar ===
Line 3802: Line 3851:
 If you want to interpolate only over certain dimensions they must be the last ones. You may use transpose to rearrange. Lets assume you have an array depending on x, y and time, i.e. z=fltarr(Nx,Ny,Nt) and you want to interpolate to certain x and y coordinates you can do this as follows: If you want to interpolate only over certain dimensions they must be the last ones. You may use transpose to rearrange. Lets assume you have an array depending on x, y and time, i.e. z=fltarr(Nx,Ny,Nt) and you want to interpolate to certain x and y coordinates you can do this as follows:
  
-  z_ipol = transpose( interpolate( transpose(z_org,[2,0,1]) , ix_ipol , iy_ipol , /grid  ), [1,2,0] )+  z_ipol = transpose( interpolate( transpose(z_org,[2,0,1]) , ix_ipol , iy_ipol , /grid, MISSING=!VALUES.f_nan  ), [1,2,0] )
  
 +The /GRID flag allow to use different sizes for ix_ipol and iy_ipol and the MISSING keyword sets values of z_ipol outside the ranges of z_org to the missing value (no extrapolation).
  
  
internal/administration/idl.1773953700.txt.gz · Last modified: by jan