📄 add_xaxis.m
字号:
function haxes=add_xaxis(annotation,label,varargin)% Function adds additional x-axis (opposite to the existing one) with different% annotation (e.g. ft instead of meter or time instead of depth)% Note: Only the original axis will change upon a zoom!!%% Written by: E. R., August 8, 2001% Last updated: February 6, 2002: Fixed bug in location of tick marks%% haxes=add_xaxis(annotation,label,varargin)% INPUT% annotation two-column vector. The first column is the tick annotation location% in terms of the existing x-axis. The second column is the value % associated with this location% label string with label of new axis% varargin one or more cell arrays; the first element of each cell array is,% a keyword string the following arguments contains a parameter(s).% Accepted keywords are: % 'color' Axis color% Default: {'color','k'}% 'location' Location of axis. Default: opposite existing axis; % however, the axis location can also be selected via % keywords 'top' or 'bottom'% 'tickwidth' line width of ticks.% Default: {'tickwidth',2} thicker tick to make them stand out better.% 'tickdir' Direction of the ticks; possible values are 'in', 'out', and ''.% The latter uses the tick direction of the already existing y-axis.% Default: {'tickdir','')% 'tickscale' Scale factor for tick length% Default: {'tickscale',1.5}% OUTPUT% haxes handle of axesglobal S4Mif nargin == 1 label=' ';end% Set defaults input argumentsparam.color='k';param.location=[];param.tickwidth=2;param.tickdir='';param.tickscale=1.5;% Use input parameters to change defaultsparam=assign_input(param,varargin);h_old=gca;v=axis;% Determine annotation within range of present axisindex=find(annotation(:,1) >= min(v(1:2)) & ... annotation(:,1) <= max(v(1:2)));use=annotation(index,:);nticks=length(index);% Determine old axis locationold_loc=get(h_old,'Xaxislocation');if ~isempty(param.location) if ~ismember(param.location,{'top','bottom'}) error(' Location parameter must be either ''top'' or ''bottom''') end xloc=param.location; if strcmp(old_loc,xloc) set(h_old,'XTickLabel',blanks(1)') % Remove existing labels end if strcmp(xloc,'bottom') lr=1; xx0=v(3); else xx0=v(4); lr=-1; endelse if strcmp(old_loc,'top') xloc='bottom'; else xloc='top'; end if strcmp(old_loc,'top') & strcmp(get(h_old,'Ydir'),'normal') lr=1; xx0=v(3); else xx0=v(4); lr=-1; endend if strcmp(xloc,old_loc)haxes=gca;set(haxes,'XColor',param.color,'XTick',use(:,1),'XTickLabel',use(:,2)); else% Reduce figure size to make room for new axispos=get(h_old,'Position');%ld1=pos(2);%ld2=1-ld1-pos(1);%ld=max([ld1,ld2]);% Plot new axeshaxes=axes('Position',pos, ... 'XaxisLocation',xloc,'Yaxislocation',get(h_old,'Yaxislocation'), ... 'Xlim',v(1:2),'Ylim',v(3:4),'XColor',param.color, ... 'XTick',use(:,1),'XTickLabel',use(:,2), ... 'XDir',get(h_old,'Xdir'),'YDir',get(h_old,'Ydir'), ... 'YTick',get(h_old,'YTick'),'YTickLabel',blanks(1)');set(haxes,'FontName',S4M.font_name)xlabel(label);% Get tick parametersif ~isempty(S4M) set(haxes,'FontName',S4M.font_name)endif strcmp(param.tickdir,'out') set(haxes,'TickDir','out');end% Restore original axesaxes(h_old);if strcmp(param.tickdir,'in') ticklength=get(h_old,'TickLength'); tickdir=-1; dxx=(v(3)-v(4))*tickdir*lr; xx=[xx0,xx0+param.tickscale*dxx*ticklength(1)];% xx1=xx0-dxx*ticklength(1); for ii=1:nticks line([use(ii,1),use(ii,1)],xx,'Color',param.color,'LineWidth',param.tickwidth); endend end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -