%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% BEGIN HEADER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Name: format_tick.m % %Usage: [hx,hy] = ... % format_tick(h,tickx,ticky,tickposx,tickposy,rotx,roty,offset,... % varargin); % %Description: Replace or appends XTickLabels and YTickLabels of axis handle % h with input tickx and ticky array % %***NOTE!***: BE SURE TO DELETE ANY PREVIOUS TEXT OBJECTS CREATED BY THIS % FUNCTION BEFORE RUNNING THIS ON THE SAME FIGURE TWICE % %Required Inputs: % h : handle of axis to change tick labels (can use gca) % tickx : cell array of tick labels or string to append to current % labels % (Defaults to appending degree symbols if not input) % %Optional Inputs % ticky : cell array of tick labels or string to append to current % labels (Can use [] or not specify to ignore) % tickposx : Vector of x positions where you want the tick labels % (Can use [] or not specify to ignore) % tickposy : Vector of y positions where you want the tick labels % (Can use [] or not specify to ignore) % rotx : Number of degrees to rotate x tick labels % (Can use [] or not specify to ignore) Default = 0.0 % roty : Number of degrees to rotate y tick labels % (Can use [] or not specify to ignore) Default = 0.0 % offset : Label offsets from axis in fraction of total range % (Can use [] or not specify to ignore) Default = 0.0 % %Optional Inputs:% % Any standard text formatting parameters such as % 'FontSize','FontWeight',etc. % Use the same way you would in a set command after putting % in the required input values. % %Outputs: % hx: handle of text objects created for XTickLabels % hy: handle of text objects created for YTickLabels % %Function Calls: % None % %Required Data Files: % None % % %Example: % ;Example 1: Append Degree Symbols to X-Axis of a Plot % figure; % plot(1:10,1:10); % [hx,hy] = format_ticks(gca); % % ;Example 2: Append Degree Symbolts to X and Y Axes of a Plot % figure; % plot(1:10,1:10); % [hx,hy] = format_ticks(gca,'^{\circ}','^{\circ}'); % % ;Example 2: Append Degree Symbolts to X and Y Axes of a Plot and % ; put a 45 degree tilt on them % figure; % plot(1:10,1:10); % [hx,hy] = format_ticks(gca,'^{\circ}','^{\circ}',[],[],45,45); % % ;Example 3: Make a plot with fractions on the x tick labels % figure % plot(1:10,1:10); % [hx,hy] = format_ticks(gca,{'$1$','$2\frac{1}{2}$','$9\frac{1}{2}$'},... % [],[1,2.5,9.5]); % % ;Example 4: Make a plot with degrees on y tick label and fractions % ; on x % figure % plot(0:10,0:10); % [hx,hy] = format_ticks(gca,... % {'$0$','$2\frac{1}{2}$','$5$','$7\frac{1}{2}$','$10$'},... % '$^{\circ}$',[0,2.5,5,7.5,10],[],0,45,[],... % 'FontSize',16,'FontWeight','Bold'); % %Change Log: % 08/19/2007: Origin Version Created by Alex Hayes % (hayes@gps.caltech.edu) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% BEGIN FUNCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [hx,hy] = ... format_ticks(h,tickx,ticky,tickposx,tickposy,rotx,roty,offset,varargin) %define axis text offset (percentage of total range) if ~exist('offset','var'); offset = 0.02; elseif length(offset) == 0; offset = 0.02; end; %make sure the axis handle input really exists if ~exist('h','var'); h = gca; warning(['Axis handle NOT Input, Defaulting to Current Axes, '... num2str(h)]); elseif length(h) == 0; h = gca; warning(['Axis Handle NOT Input, Defaulting to Current Axes, '... num2str(h)]); elseif ~ishandle(h(1)) warning(['Input (' num2str(h(1)) ') is NOT an axis handle, ' ... 'defaulting to current axis, ' num2str(h)]); h = gca; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%BEGIN: FIRST THE X-AXIS TICK LABELS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %fix the XTickLabels if they have been erased in the past if length(get(h,'XTickLabel'))==0; set(h,'XTickLabel',get(h,'XTick')); end; %set the xtick positions if entered if exist('tickposx','var'); if length(tickposx) > 0; set(h,'XTick',tickposx); end; tickposx = get(h,'XTick'); set(h,'XTickLabel',tickposx); end; %make sure the xtick positions are in the xlimit range if exist('tickposx','var'); if length(tickposx) > 0; lim = get(h,'XLim'); if lim(1) > min(tickposx); lim(1) = min(tickposx); end; if lim(2) < max(tickposx); lim(2) = max(tickposx); end; set(h,'XLim',lim); end; end; %get the tick labels and positions if the user did not input them if ~exist('tickx','var'); tickx = get(h,'XTickLabel'); if ischar(tickx); temp = tickx; tickx = cell(1,size(temp,1)); for j=1:size(temp,1); tickx{j} = strtrim( temp(j,:) ); end; end; append = '^{\circ}'; for j=1:length(tickx); tickx{j} = [tickx{j} append]; end; elseif length(tickx) == 0; tickx = get(h,'XTickLabel'); if ischar(tickx); temp = tickx; tickx = cell(1,size(temp,1)); for j=1:size(temp,1); tickx{j} = strtrim( temp(j,:) ); end; end; append = '^{\circ}'; for j=1:length(tickx); tickx{j} = [tickx{j} append]; end; elseif isstr(tickx); append = tickx; tickx = get(h,'XTickLabel'); if ischar(tickx); temp = tickx; tickx = cell(1,size(temp,1)); for j=1:size(temp,1); tickx{j} = strtrim( temp(j,:) ); end; end; if strcmp(append(1),'$'); for j=1:length(tickx); tickx{j} = ['$' tickx{j} append(2:end)]; end; else; for j=1:length(tickx); tickx{j} = [tickx{j} append]; end; end; elseif ~iscell(tickx ); warning(['Input TICKX variable is not a compatible string ' ... 'or cell array! Returning...']); return; end; %find out if we have to use the LaTex interpreter temp = tickx{1}; if strcmp(temp(1),'$'); latex_on = 1; else; latex_on = 0; end; %erase the current tick label set(h,'XTickLabel',{}); %get the x tick positions if the user did not input them if ~exist('tickposx','var'); tickposx = get(h,'XTick'); elseif length(tickx) == 0; tickposx = get(h,'XTick'); end; %get the y tick positions if the user did not input them if ~exist('tickposy','var'); tickposy = get(h,'YTick'); elseif length(tickposy) == 0; tickposy = get(h,'YTick'); end; %set the new tick positions set(h,'YTick',tickposy); set(h,'XTick',tickposx); %check the lengths of the xtick positions and xtick labels l1 = length(tickx); l2 = length(tickposx); if l1==0; set(h,'XTickLabel',tickx); end; if l1~=l2; disp(['Length of XTick = ' num2str(length(tickposx))]); disp(['Length of XTickLabel = ' num2str(length(tickx))]); if l2 < l1; warning(['Reducing Length of XTickLabel!']); else; warning(['Reducing Length of XTick!']); end; l3 = min([l1,l2]); tickx = tickx{1:l3}; tickposx = tickposx(1:l3); end; %set rotation to 0 if not input if ~exist('rotx','var'); rotx = 0; elseif length(rotx) == 0; rotx = 0; end; %Convert the cell labels to a character string %tickx = char(tickx); tickx = cellstr(tickx); %Make the XTICKS! lim = get(h,'YLim'); if min(tickposy) < lim(1); lim(1) = min(tickposy); end; if max(tickposy) > lim(2); lim(2) = max(tickposy); end; if rotx == 0; if latex_on; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposx),1),... tickx,'HorizontalAlignment','center',... 'VerticalAlignment','top','rotation',rotx,'interpreter','LaTex'); else; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposx),1),... tickx,'HorizontalAlignment','center',... 'VerticalAlignment','top','rotation',rotx); end; elseif rotx < 0; if latex_on; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposx),1),... tickx,'HorizontalAlignment','left','interpreter','LaTex',... 'VerticalAlignment','middlefi','rotation',rotx); else; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposx),1),... tickx,'HorizontalAlignment','left',... 'VerticalAlignment','middle','rotation',rotx); end; else; if latex_on; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposx),1),... tickx,'HorizontalAlignment','right','interpreter','LaTex',... 'VerticalAlignment','middle','rotation',rotx); else; hx = text(tickposx,... repmat(lim(1)-offset*(lim(2)-lim(2)),length(tickposx),1),... tickx,'HorizontalAlignment','right',... 'VerticalAlignment','middle','rotation',rotx); end; end; %Get and set the text size and weight set(hx,'FontSize',get(h,'FontSize')); set(hx,'FontWeight',get(h,'FontWeight')); %Set the additional parameters if they were input if length(varargin) > 2; command_string = ['set(hx']; for j=1:2:length(varargin); command_string = [command_string ',' ... '''' varargin{j} ''',varargin{' num2str(j+1) '}']; end; command_string = [command_string ');']; eval(command_string); end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%END: FIRST THE X-AXIS TICK LABELS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%BEGIN: NOW THE Y-AXIS TICK LABELS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %only move forward if we are doing anything to the yticks if ~exist('ticky'); hy = -1; elseif length(ticky)==0; hy = -1; else; %fix the YTickLabels if they have been erased in the past if length(get(h,'YTickLabel'))==0; set(h,'YTickLabel',get(h,'YTick')); end; %set the ytick positions if entered if exist('tickposy','var'); if length(tickposy) > 0; set(h,'YTick',tickposy); set(h,'YTickLabel',tickposy); end; end; %make sure the xtick positions are in the xlimit range if exist('tickposy','var'); if length(tickposy) > 0; lim = get(h,'YLim'); if lim(1) > min(tickposy); lim(1) = min(tickposy); end; if lim(2) < max(tickposy); lim(2) = max(tickposy); end; set(h,'YLim',lim); end; end; %get the tick labels and positions if the user did not input them if ~exist('ticky','var'); ticky = get(h,'YTickLabel'); if ischar(ticky); temp = ticky; ticky = cell(1,size(temp,1)); for j=1:size(temp,1); ticky{j} = strtrim( temp(j,:) ); end; end; append = '^{\circ}'; for j=1:length(ticky); ticky{j} = [ticky{j} append]; end; elseif length(ticky) == 0; ticky = get(h,'YTickLabel'); if ischar(ticky); temp = ticky; ticky = cell(1,size(temp,1)); for j=1:size(temp,1); ticky{j} = strtrim( temp(j,:) ); end; end; append = '^{\circ}'; for j=1:length(ticky); ticky{j} = [ticky{j} append]; end; elseif isstr(ticky); append = ticky; ticky = get(h,'YTickLabel'); if ischar(ticky); temp = ticky; ticky = cell(1,size(temp,1)); for j=1:size(temp,1); ticky{j} = strtrim( temp(j,:) ); end; end; if strcmp(append(1),'$'); for j=1:length(ticky); ticky{j} = ['$' ticky{j} append(2:end)]; end; else; for j=1:length(ticky); ticky{j} = [ticky{j} append]; end; end; elseif ~iscell(ticky ); warning(['Input TICKY variable is not a compatible string ' ... 'or cell array! Returning...']); return; end; %find out if we have to use the LaTex interpreter temp = ticky{1}; if strcmp(temp(1),'$'); latex_on = 1; else; latex_on = 0; end; %erase the current tick label set(h,'YTickLabel',{}); %get the x tick positions if the user did not input them if ~exist('tickposy','var'); tickposy = get(h,'YTick'); elseif length(ticky) == 0; tickposy = get(h,'YTick'); end; %get the x tick positions if the user did not input them if ~exist('tickposx','var'); tickposx = get(h,'YTick'); elseif length(tickposx) == 0; tickposx = get(h,'XTick'); end; %set the new tick positions set(h,'YTick',tickposy); % set(h,'XTick',tickposx); %check the lengths of the xtick positions and xtick labels l1 = length(ticky); l2 = length(tickposy); if l1==0; set(h,'YTickLabel',ticky); end; if l1~=l2; disp(['Length of YTick = ' num2str(length(tickposy))]); disp(['Length of YTickLabel = ' num2str(length(ticky))]); if l2 < l1; warning(['Reducing Length of YTickLabel!']); else; warning(['Reducing Length of YTick!']); end; l3 = min([l1,l2]); ticky = ticky{1:l3}; tickposy = tickposy(1:l3); end; %set rotation to 0 if not input if ~exist('roty','var'); roty = 0; elseif length(roty) == 0; roty = 0; end; %Convert the cell labels to a character string %ticky = char(ticky); ticky = cellstr(ticky); %Make the YTICKS! lim = get(h,'XLim'); if min(tickposx) < lim(1); lim(1) = min(tickposx); end; if max(tickposx) > lim(2); lim(2) = max(tickposx); end; if roty == 0; if latex_on; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty,'interpreter','LaTex'); else; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty); end; elseif roty < 180; if latex_on; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty,'interpreter','LaTex'); else; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty); end; else; if latex_on; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty,'interpreter','LaTex'); else; hy = text(... repmat(lim(1)-offset*(lim(2)-lim(1)),length(tickposy),1),... tickposy,... ticky,'VerticalAlignment','middle',... 'HorizontalAlignment','right','rotation',roty); end; end; %Get and set the text size and weight set(hy,'FontSize',get(h,'FontSize')); set(hy,'FontWeight',get(h,'FontWeight')); %Set the additional parameters if they were input if length(varargin) > 2; command_string = ['set(hy']; for j=1:2:length(varargin); command_string = [command_string ',' ... '''' varargin{j} ''',varargin{' num2str(j+1) '}']; end; command_string = [command_string ');']; eval(command_string); end; end;