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

时间:2017-03-23 13:58:05

标签: matlab text plot filenames watermark

我每个情节都有一个.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

2 个答案:

答案 0 :(得分:4)

我建议不要在代码中注释掉函数,而是使用正确的标志。例如,代码可以是这样的:

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

enter image description here

稍微使用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

enter image description here

注意:显然,ifelse之间的代码可以存储为从fnames变量接收字符串(char)的函数,这个数字的句柄。

答案 1 :(得分:1)

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

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

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