0

N個のデータセットを渡し、forループを使用してそれらを線グラフにプロットする方法はありますか?固定数のパラメーター(M1、M2、M3、M4など)を渡して、以下のように手動でプロットを繰り返します。しかし、関数を動的にコーディングする方法があるのだろうか?4つのデータセットまたは40のデータセットを渡し、ループを介してそれらを1つのグラフにプロットできるとします。

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
4

1 に答える 1

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つの異なるプロットしか作成できません。さらに実行するとエラーが発生します)。

于 2012-08-14T04:37:39.783 に答える