2014-09-09 10 views

Répondre

1

Est-ce à des fins de débogage ? Sinon, je vous suggère de nous dire votre motivation globale parce que quelqu'un pourrait être en mesure de proposer une méthode plus robuste, mais cela pourrait vous aider à démarrer:

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

Bien que pour être honnête, je ne peux pas imaginer pourquoi cela serait jamais utile

+0

Je pense que c'est très utile quand je suis par exemple. essayer un tas de seuils, et ensuite je veux savoir quel seuil a abouti au meilleur résultat. – Jonas

+0

@Jonas Comment faites-vous? – Dan

+0

accéder à l'historique des commandes (voir ma réponse). – Jonas

1

Je pense que cela fait ce que vous voulez et reste assez souple:

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

Les exemples suivants travaillent tous pour moi:

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

J'ai modifié la fonction dfig créée à l'origine par F.Moisy pour créer des figures ancrées afin que la commande utilisée pour le tracé apparaisse dans le nom de la figure.

L'idée est de lire la dernière commande dans l'historique des commandes et de l'utiliser pour générer le titre de la figure.

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

J'ai créé un wrapper similaire à 'imshow', bien que là, je n'utilise que les arguments passés à la fonction pour le titre - après tout, je sais quelle fonction de traçage a été utilisé. – Jonas

Questions connexes