我在绘图上有13行,每行对应一个文本文件中的一组数据。我想标记每行从第一组数据开始为1.2,然后是1.25,1.30,到1.80等,每个增量为0.05。如果我要手动输入,那就是
legend('1.20','1.25','1.30', ...., '1.80')
但是,将来我的图表上可能会有超过20行。因此输入每一个都是不现实的。我尝试在图例中创建一个循环,它不起作用。
我怎样才能以实际的方式做到这一点?
N_FILES=13 ;
N_FRAMES=2999 ;
a=1.20 ;b=0.05 ;
phi_matrix = zeros(N_FILES,N_FRAMES) ;
for i=1:N_FILES
eta=a + (i-1)*b ;
fname=sprintf('phi_per_timestep_eta=%3.2f.txt', eta) ;
phi_matrix(i,:)=load(fname);
end
figure(1);
x=linspace(1,N_FRAMES,N_FRAMES) ;
plot(x,phi_matrix) ;
需要帮助:
legend(a+0*b,a+1*b,a+2*b, ...., a+N_FILES*b)
答案 0 :(得分:7)
作为构建图例的替代方法,您还可以设置线条的DisplayName
属性,以便图例自动更正。
因此,您可以执行以下操作:
N_FILES = 13;
N_FRAMES = 2999;
a = 1.20; b = 0.05;
% # create colormap (look for distinguishable_colors on the File Exchange)
% # as an alternative to jet
cmap = jet(N_FILES);
x = linspace(1,N_FRAMES,N_FRAMES);
figure(1)
hold on % # make sure new plots aren't overwriting old ones
for i = 1:N_FILES
eta = a + (i-1)*b ;
fname = sprintf('phi_per_timestep_eta=%3.2f.txt', eta);
y = load(fname);
%# plot the line, choosing the right color and setting the displayName
plot(x,y,'Color',cmap(i,:),'DisplayName',sprintf('%3.2f',eta));
end
% # turn on the legend. It automatically has the right names for the curves
legend
答案 1 :(得分:6)
使用'DisplayName'作为plot()属性,并将您的图例称为
legend('-DynamicLegend');
我的代码如下所示:
x = 0:h:xmax; % get an array of x-values
y = someFunction; % function
plot(x,y, 'DisplayName', 'Function plot 1'); % plot with 'DisplayName' property
legend('-DynamicLegend',2); % '-DynamicLegend' legend
来源:http://undocumentedmatlab.com/blog/legend-semi-documented-feature/
答案 2 :(得分:5)
legend
也可以将字符串的单元格列表作为参数。试试这个:
legend_fcn = @(n)sprintf('%0.2f',a+b*n);
legend(cellfun(legend_fcn, num2cell(0:N_FILES) , 'UniformOutput', false));
答案 3 :(得分:1)
最简单的方法可能是创建要用作标签的数字的列向量,使用函数NUM2STR将它们转换为带N_FILES
行的格式化字符数组,然后将其作为LEGEND的一个参数:
legend(num2str(a+b.*(0:N_FILES-1).','%.2f'));
答案 4 :(得分:0)
我发现通过Google找到了this:
legend(string_matrix)
添加一个包含矩阵string_matrix
行的图例作为标签。这与legend(string_matrix(1,:),string_matrix(2,:),...)
相同。
所以基本上,看起来你可以用某种方式构建矩阵来做到这一点。
一个例子:
strmatrix = ['a';'b';'c';'d'];
x = linspace(0,10,11);
ya = x;
yb = x+1;
yc = x+2;
yd = x+3;
figure()
plot(x,ya,x,yb,x,yc,x,yd)
legend(strmatrix)