开发者

Why is IDL adding it's own tick marks to my custom plot tick marks?

开发者 https://www.devze.com 2023-01-10 18:42 出处:网络
I\'m trying to specify custom Y axis tick marks, but IDL is not cooperating. In the top left, 1.0000 should be the max value, but IDL puts a 57 there. 57 is the max array dimension of my data.

I'm trying to specify custom Y axis tick marks, but IDL is not cooperating.

Why is IDL adding it's own tick marks to my custom plot tick marks?

In the top left, 1.0000 should be the max value, but IDL puts a 57 there. 57 is the max array dimension of my data.

I have an array of eta levels(strings) corresponding 1:1 with the array indices, and I want to use them as tick marks. I've got a bit of code that let's it plot X major tick marks, but IDL keeps throwing that silly max array index value in there instead of my desired final tick mark.

Is there a way I can get rid of that?

As requested, here is the code:

;Get the total number of possible y axis values( this case has 58 )
number_of_ticks = (size( custom_levels[ min_level:max_level ] ) )[1]

;I want 6 major tick marks
number_of_major_ticks = 6

;The amount in between each tick in terms of array index
tick_step = number_of_ticks / number_of_major_ticks

;Check if we can fit another tick mark in
if ((((number_of_major_ticks - 1)+min_level) * tick_step) + tick_step) LT number_of_ticks then begin
   number_of_major_ticks = number_of_major_ticks + 1
endif

;Get the array pos开发者_运维问答itions of the values that will be used for tick marks
tick_array_indices = indgen( number_of_major_ticks )    
tick_array_indices = (tick_array_indices+min_level) * tick_step

;Now build the array of tick mark strings that should be displayed
y_tick_labels = strarr( number_of_major_ticks + 1 )

for i = 0, number_of_major_ticks - 1 do begin
   y_tick_labels[i] = custom_levels[ tick_array_indices[ i ] ]
endfor

;That's all the initial setup, now to actually plot the data:
if overplot EQ 1 then begin 
  CASE contour_type OF
    'Solid Line':contour, var_slice, /overplot, levels = var_levels, /FOLLOW, Color = 0, YSTYLE = 1, XSTYLE = 1, XRANGE = [0, n_points ], YRANGE = [ min_level, max_level ]
    'Dashed Line':contour, var_slice, /overplot, levels = var_levels, /FOLLOW,  C_LINESTYLE = [1], C_COLOR = 0, Color = 0, YSTYLE = 1, XSTYLE = 1, YRANGE = [ min_level, max_level ], XRANGE = [0, n_points ]  
  endcase
endif else begin
  CASE contour_type OF
    'Fill':contour, var_slice, /Fill, C_COLORS=var_colors, Background = 16777215, levels=var_levels, POSITION=[0.1, 0.25, 0.9, 0.95], /NORMAL, Color = 0, Title = 'Cross section plot between coordinates ' +  strtrim(lat[x1, y1],2) + ',' + strtrim(lon[x1, y1],2) + ' and ' + strtrim(lat[x2, y2],2) + ',' + strtrim(lon[x2, y2],2), YTICKS = number_of_major_ticks, YTICKNAME =  y_tick_labels, YTITLE = custom_levels_title, XTITLE = 'Points in between the 2 chosen coordinates', CHARSIZE = 1.2, YSTYLE = 1, XSTYLE = 1, YRANGE = [ min_level, max_level ], XRANGE = [0, n_points ]
    'Solid Line':contour, var_slice, Background = 16777215, levels=var_levels, POSITION=[0.1, 0.25, 0.9, 0.95], Color = 0, Title = 'Cross section plot between coordinates ' +  strtrim(lat[x1, y1],2) + ',' + strtrim(lon[x1, y1],2) + ' and ' + strtrim(lat[x2, y2],2) + ',' + strtrim(lon[x2, y2],2), YTICKS = number_of_major_ticks, YTICKNAME =  y_tick_labels, YTITLE = custom_levels_title, XTITLE = 'Points in between the 2 chosen coordinates', CHARSIZE = 1.2, YSTYLE = 1, XSTYLE = 1, YRANGE = [ min_level, max_level ], XRANGE = [0, n_points ]
    'Dashed Line':contour, var_slice, Background = 16777215, levels=var_levels,C_LINESTYLE = [1], C_COLOR = 0, POSITION=[0.1, 0.25, 0.9, 0.95], Color = 0, Title = 'Cross section plot between coordinates ' +  strtrim(lat[x1, y1],2) + ',' + strtrim(lon[x1, y1],2) + ' and ' + strtrim(lat[x2, y2],2) + ',' + strtrim(lon[x2, y2],2), YTICKS = number_of_major_ticks, YTICKNAME =  y_tick_labels, YTITLE = custom_levels_title, XTITLE = 'Points in between the 2 chosen coordinates', CHARSIZE = 1.2, YSTYLE = 1, XSTYLE = 1, YRANGE = [ min_level, max_level ], XRANGE = [0, n_points ]           
  endcase  
endelse    

The fill case is the one that is being used right now. var_slice is a 450x58 array in this case.


Woops, figured it out.

IDL seems to require that you specify a number of tick marks 1 less than the labels you give it.

So if you want 11 tick marks, and have 11 labels for your tick marks, set the number of major tick marks to 10.

0

精彩评论

暂无评论...
验证码 换一张
取 消