如何在 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
注意: 显然if
和else
之间的代码可以存储为一个函数,从[=中接收字符串(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
中的第一个条目是指当前函数;第二个是指调用它的那个。
我每个绘图有一个 .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
注意: 显然if
和else
之间的代码可以存储为一个函数,从[=中接收字符串(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
中的第一个条目是指当前函数;第二个是指调用它的那个。