Code covered by the BSD License  

Highlights from
Change log labels v2

from Change log labels v2 by Daniel Armyr
Alters log labels of to linear labels (10^1.45 to 28.18). Remakes when zoom and pan are used.

changeloglabels(haxes)
% function changeloglabels(haxes)
%
% PURPOSE: Function changes the log labels of 10^XX to linear units.  For
% example from 10^1.45 to 28.18.  Recalculates and displays when zoom
% in/out and pan are used.
%
% USE: Can be used from command line or inside display functions, simply
% send the handles of the axes that you wish the function to operate on.
% Function will determine which axes or both are log.
%
% Jeffrey A Ballard
% January 15, 2009
%
% Version 2: haxes can now be a cell-array of handles. haxes can also be
% handles to line-objects. This means the following code will now work:
%
%  h = loglog( rand(10) );
%  changeloglabels(h);


function changeloglabels(haxes)

assert ( ~isempty(haxes), 'Must provide at least one handle.' );

%If we have a cell-array, try to convert to a matrix.
if ( iscell(haxes) )
	haxes = cell2mat(haxes);
end

% If we got handles to lines, we convert them to axes.
for i = 1:numel(haxes)
	if ( strcmp(get(haxes(i),'Type'),'line') )
		haxes(i) = get(haxes(i),'Parent');
	end
end

% Get the figure handles for each of the figures, and determine which axes
% belong to which figure
for ii=1:length(haxes)
    hfig(ii) = get(haxes(ii),'Parent');
end
figs = unique(hfig);
for ii=1:length(figs)
    ind_haxes{ii} = find(hfig==figs(ii));
end

% Now loop over one figure at a time, then each axes on the figure
%   1. create random tags for the axes
%   2. change the labels to linear units
%   3. set the zoom in/out, pan functions using the random tags
for jj=1:length(figs)
    for ii=1:length(ind_haxes{jj})

        % Creating random tags
        char1 = char(floor(rand*25)+97);
        char2 = char(floor(rand*25)+97);
        char3 = char(floor(rand*25)+97);
        char4 = char(floor(rand*25)+97);
        char5 = char(floor(rand*25)+97);

        tags{ii} = [char1 char2 char3 char4 char5 '_' num2str(round(rand*1000000))];

        % Change the labels to linear units
        set(haxes(ind_haxes{jj}(ii)),'Tag',tags{ii})
        if strcmpi(get(haxes(ind_haxes{jj}(ii)),'XScale'),'log')
            set(haxes(ind_haxes{jj}(ii)),'XTickLabelMode','auto')
            xlabels = get(haxes(ind_haxes{jj}(ii)),'XTickLabel');
            for mm=1:size(xlabels,1)
                xticklabels{mm}=num2str(10^(str2double(strtrim(xlabels(mm,:)))));
            end
            set(haxes(ind_haxes{jj}(ii)),'XTickLabel',xticklabels)
            clear xticklabels
        end
        if strcmpi(get(haxes(ind_haxes{jj}(ii)),'YScale'),'log')
            set(haxes(ind_haxes{jj}(ii)),'YTickLabelMode','auto')
            ylabels = get(haxes(ind_haxes{jj}(ii)),'YTickLabel');
            for mm=1:size(ylabels,1)
                yticklabels{mm}=num2str(10^(str2double(strtrim(ylabels(mm,:)))));
            end
            set(haxes(ind_haxes{jj}(ii)),'YTickLabel',yticklabels)
            clear yticklabels
        end
    end

    % Create the string that identifies the tags for callbacks
    start = ['tags{1}=''' tags{1} ''''];
    for ii=2:length(ind_haxes{jj})
        start = [start ';tags{' num2str(ii) '}=''' tags{ii} ''''];
    end
    
    % Get the zoom and pan handles
    hzoom = zoom(figs(jj));
    hpan  = pan(figs(jj));
    
    % Set the callbacks to remake the labels
    set(hzoom,'ActionPostCallback',...
        sprintf([ start ';for ii=1:length(tags);hax = findobj(%d,''Tag'',tags{ii});if strcmp(get(hax,''XScale''),''log'');set(hax,''XTickLabelMode'',''auto'');xlabels = get(hax,''XTickLabel'');for jj=1:size(xlabels,1);xticklabels{jj}=num2str(10^(str2double(strtrim(xlabels(jj,:)))));end;set(hax,''XTickLabel'',xticklabels);end;if strcmp(get(hax,''YScale''),''log'');set(hax,''YTickLabelMode'',''auto'');ylabels = get(hax,''YTickLabel'');for jj=1:size(ylabels,1);yticklabels{jj}=num2str(10^(str2double(strtrim(ylabels(jj,:)))));end;set(hax,''YTickLabel'',yticklabels);end;end'],figs(jj)));
    set(hpan,'ActionPostCallback',...
        sprintf([ start ';for ii=1:length(tags);hax = findobj(%d,''Tag'',tags{ii});if strcmp(get(hax,''XScale''),''log'');set(hax,''XTickLabelMode'',''auto'');xlabels = get(hax,''XTickLabel'');for jj=1:size(xlabels,1);xticklabels{jj}=num2str(10^(str2double(strtrim(xlabels(jj,:)))));end;set(hax,''XTickLabel'',xticklabels);end;if strcmp(get(hax,''YScale''),''log'');set(hax,''YTickLabelMode'',''auto'');ylabels = get(hax,''YTickLabel'');for jj=1:size(ylabels,1);yticklabels{jj}=num2str(10^(str2double(strtrim(ylabels(jj,:)))));end;set(hax,''YTickLabel'',yticklabels);end;end'],figs(jj)));
    
    % Clear variables
    clear start tags
end

end

Contact us