Warum fügt IDL die eigenen Zeckenspuren zu meinen benutzerdefinierten Tick -Markierungen hinzu?
-
26-09-2019 - |
Frage
Ich versuche, benutzerdefinierte Y -Achsen -Zeckenspuren anzugeben, aber IDL kooperiert nicht.
Oben links sollte 1.0000 der maximale Wert sein, aber IDL legt dort eine 57. 57 ist die Max -Array -Dimension meiner Daten.
Ich habe eine Reihe von ETA -Werten (Saiten), die 1: 1 mit den Array -Indizes entsprechen, und ich möchte sie als Zeckenspuren verwenden. Ich habe ein bisschen Code, dass es sich um eine Haupt -Tick -Marke handelt, aber Idl werfen den dummen Max -Array -Indexwert anstelle meiner gewünschten letzten Zeckenmarke immer wieder.
Gibt es eine Möglichkeit, das loszuwerden?
Wie angefordert ist hier der 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 positions 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
Der Füllfall ist derjenige, der derzeit verwendet wird. var_slice ist in diesem Fall ein 450x58 -Array.
Lösung
Woops, fand es heraus.
IDL scheint zu verlangen, dass Sie eine Reihe von Zeckenspuren 1 weniger angeben als die von Ihnen angegebenen Etiketten.
Wenn Sie also 11 Zeckenspuren wünschen und 11 Labels für Ihre Zeckenspuren haben, setzen Sie die Anzahl der wichtigsten Zeckenspuren auf 10.