Plot automatically named with plot object in Matlab

I would like to know if some of you know a way to automatically title plots with the name of the object plotted on the plot

so for intance when constructing a supermatrix (5:10,:, 2: 3), the name (or legend ..) on the plot says "supermatrix (5:10,:, 2: 3)"

thank

+3


source to share


3 answers


Is this for debugging purposes? If not, then I suggest you tell us your general motivation, because someone might suggest a more reliable method, but this might get you started:

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

      



Although, to be honest, I cannot imagine why this would ever be useful

+1


source


I think this does what you want, and remains pretty flexible:

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

      



The following examples work for me:

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


source


I modified the function dfig

originally created by F.Moisy for creating frozen shapes so that the command used to draw appears in the figure name.

The idea is to read the last command in the command history and use that to create a name for the shape.

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

      

+1


source







All Articles