如何在 matlab 的绘图中打印当前文件名?

How to print the current filename in a plot in matlab?

我每个绘图有一个 .m 文件,我想在我的打印输出草稿中看到,哪个文件是用来创建它的。

这应该通过一个可以放在我的 .m 文件中的函数来完成,并且 注释掉,为最终版本。

% addWatermarkFilename() % 

到目前为止我找到了mfilename(),但它无法获取调用函数的名称。我也在寻找一种在不改变大小的情况下将文本放入图片中的好方法。

解决方法: 我将 Luis Mendo 和 NKN 的建议合并为:

function [ output_args ] = watermarkfilename( )
% WATERMARKFILENAME prints the filename of the calling script in the
% current plot

s = dbstack; 
fnames = s(2).name;

TH = text(0,0,fnames,'Interpreter','none');
    TH.Color = [0.7 0.7 0.7];
    TH.FontSize = 14;
    TH.Rotation = 45;

uistack(TH,'bottom');    
end

我建议不要从代码中注释掉函数,而是使用适当的标记。例如代码可以是这样的:

clc,clear,close all
addWaterMark = true;    % if true you will get the filename in the title
fname = mfilename;      % get file name mfilename('fullpath') for the full-path
t=-2*pi:0.1:2*pi;
y = sin(t);
plot(t,y); grid on;
xlabel('t');ylabel('y');
if addWaterMark
    title(['filename: ' fname '.m']);
else
    title('plot no.1');
end

稍微玩一下text的功能,可以制作出合适的水印。像这样:

clc,clear,close all
addWaterMark = true;
fname = mfilename;
fnames = [fname '.m'];
t=-2*pi:0.1:2*pi;
y = sin(t);
plot(t,y); grid on;
xlabel('t');ylabel('y');
if addWaterMark
    title(['filename: ' fnames]);
    t = text(-3,-0.4,fnames);
    t.Color = [0.7 0.7 0.7];
    t.FontSize = 40;
    t.Rotation = 45;
else
    title('plot no.1');
end

注意: 显然ifelse之间的代码可以存储为一个函数,从[=中接收字符串(char) 15=] 变量和图的句柄。

如果要获取调用当前函数或脚本的函数或脚本的名称,请使用dbstack,如下所示:

s = dbstack; % get struct with function call stack information 
callerName = s(2).name; % get name of second function in the stack

s中的第一个条目是指当前函数;第二个是指调用它的那个。