有没有办法传入N个数据集并使用for循环在线图中绘制它们? 我通过传递固定数量的参数(例如M1,M2,M3,M4),并如下手动重复绘图。但我想知道是否有办法动态编码函数?假设我可以传入4个数据集或40个数据集,并通过循环将它们绘制在一个图中。
function plot_four_cdf(M1,M2,M3,M4)
[ycdf1,xcdf1] = cdfcalc(M1);
ycdf1 = ycdf1(2:length(ycdf1));
plot(xcdf1, ycdf1, '-+k', 'LineWidth', 1);
hold on;
[ycdf2,xcdf2] = cdfcalc(M2);
ycdf2 = ycdf2(2:length(ycdf2));
plot(xcdf2, ycdf2, '-ok', 'LineWidth', 1);
hold off;
hold on;
[ycdf3,xcdf3] = cdfcalc(M3);
ycdf3 = ycdf3(2:length(ycdf3));
plot(xcdf3, ycdf3, '-*k', 'LineWidth', 1);
hold off;
hold on;
[ycdf4,xcdf4] = cdfcalc(M4);
ycdf4 = ycdf4(2:length(ycdf4));
plot(xcdf4, ycdf4, '-sk', 'LineWidth', 1);
legend('M100','M80','M50','M20',...
'Location','SE')
xlabel('Relative Error');
ylabel('CDF');
end
答案 0 :(得分:0)
您可以将所有数据分组到单元格数组中,并将其传递给函数:
function plot_cdfs(M)
figure, hold on
linestyles = {...
'-+k', '-ok', '-*k', '-sk', ...
'-+r', '-or', '-*r', '-sr');
legendentries = cell(size(M));
for ii = 1:numel(M)
[ycdf, xcdf] = cdfcalc(M{ii});
plot(xcdf, ycdf(2:end), linestyles{ii}, 'LineWidth', 1);
legendentries{ii} = ['M' num2str(ii)];
end
legend(legendentries{:}, 'Location','SE')
xlabel('Relative Error');
ylabel('CDF');
end
请注意,M
的构造类似于
M = {M1, M2, M3, ...}
也可能在它自己的循环中。另请注意,legendentries
现在很难定义。您可以将它们作为单独的参数传递给函数(更好的选项),或者将它们放在它们描述的数据旁边的相同单元数组M
中(不是非常便携)。
另请注意,您必须进行一些错误检查(现在,只能进行8个不同的绘图。如果您执行更多操作,将导致错误。)