2014-09-09 3 views
3

Я хотел бы знать, если кто-то из вас знает, как для автоматического названия участков с именем объекта построенныхучастка автоматически озаглавлен объектом участка в MATLAB

так что для входа в инстанс, когда я сюжет суперматричный (5: 10,:, 2: 3) название (или легенда ..) на графике говорит "суперматричное (5:10,:, 2: 3)"

благодаря

ответ

1

Является ли это для отладки ? Если нет, то я предлагаю вам рассказать нам свою общую мотивацию, потому что кто-то может быть в состоянии предложить более надежный метод, но это может заставить вас начать:

vname = @(x)inputname(1); %//from here: https://www.mathworks.com/matlabcentral/newsreader/view_thread/251347 
plot(supermatrix(5:10,:,2:3)) 
title(vname(supermatrix)) 

Хотя если честно, я не могу себе представить, почему это будет когда-либо быть полезным

+0

Я думаю, что это очень полезно, когда я, например. пробуя кучу порогов, а потом я хочу знать, какой порог привел к лучшему результату. – Jonas

+0

@Jonas Как вы это делаете? – Dan

+0

Доступ к истории команд (см. Мой ответ). – Jonas

1

Я думаю, что это делает то, что вы хотите, и остается довольно гибок:

function h = plotwithtitle(plotstring, varargin) 
    argstoplot = evalin('caller', ['{', plotstring, '}']); 
    h = plot(argstoplot{:}, varargin{:}); 
    title(plotstring); 
end 

следующие примеры все работают для меня:

supermatrix=rand(10,10); 
x=1:10; 
y=rand(1,10); 

plotwithtitle('supermatrix'); 
plotwithtitle('supermatrix(5:10,:)'); 
plotwithtitle('x, y'); 
plotwithtitle('x, y', '--r'); 
plotwithtitle('1:10', 'r'); 
plotwithtitle('rand(1,10)'); 
1

Я изменил функцию dfig, первоначально созданную Ф.Мойи для создания пристыкованных фигур, чтобы команда, используемая для построения, отображалась в имени фигуры.

Идея состоит в том, чтобы прочитать последнюю команду в истории команд и использовать ее для генерации названия фигуры.

function hh = dfig(varargin) 
%DFIG Create docked figure window 
% DFIG, by itself, creates a new docked figure window, and returns its 
% handle. 
% 
% DFIG(H) makes H the current figure and docks it. If Figure H does not 
% exist, and H is an integer, a new figure is created with handle H. 
% 
% DFIG(H, name, value,...) reads additional name-value pairs. See 
% doc(figure) for available otions. 
% 
% DFIG will parse the command line input and use the text following dfig 
% as figure name. E.g. calling dfig,plot(x(1:3),y(2:2:end)) results in 
% the name "plot(x(1:3),y(2:2:end))" 

% F. Moisy, moisy_at_fast.u-psud.fr 
% Revision: 1.00, Date: 2007/09/11 
% Modified (a lot) by Jonas 


if nargin==0 
    h=figure; % create a new figure 
else 
    % call figure with varargin 
    figure(varargin{:}) 
    h = gcf; 

end 

if ~any(strcmp('name',varargin(1:2:end))) 
    % if no name has been supplied: try to use function call 
    javaHistory=com.mathworks.mlservices.MLCommandHistoryServices.getSessionHistory; 
    if ~isempty(javaHistory) 
     lastCommand = javaHistory(end).toCharArray'; 
     funCall = regexp(lastCommand,'dfig\s*[,;]\s*(.*)$','tokens','once'); 
    else 
     funCall = []; 
    end 
    if ~isempty(funCall) 
     if isnumeric(h) 
     set(h,'Name',[num2str(h),': ',funCall{1}],'NumberTitle','off') 
     else % HG2 
      h.Name = sprintf('%i: %s',h.Number,funCall{1}); 
      h.NumberTitle = 'off'; 
     end 
    end 
end 

set(h,'WindowStyle','docked'); % dock the figure 

if nargout~=0 % returns the handle if requested 
    hh=h; 
end 
+0

Я создал подобную оболочку 'imshow', хотя там я использую только аргументы, переданные в функция для названия - в конце концов, я знаю, какая функция построения графика была использована. – Jonas

Смежные вопросы