如何在同一图表中使用循环'为matlab绘制多个向量

时间:2015-05-09 23:37:56

标签: matlab

我怎样只能在一个图中显示几对x,y? 我尝试过在谷歌上发现的所有内容,但在所有情况下,只显示了一对有序的点x,y。

谢谢。

pws = 2000;
q0EF = 500;
EF_vec = [0.2, 0.5, 0.8, 0.9];
hold all;
for k=1:length(EF_vec)
    if(EF_vec(k) <= 1)
        i = 1;
        clearvars y x;
        for pwfi=0:100:pws
            pwfp = pws - (pws - pwfi )*EF_vec(k);
            y(i) = pwfp;
            x(i) = q0EF * (1 - 0.2*(pwfp/pws) - 0.8*(pwfp/pws)^2 );
            i = i + 1;
        end
        plot(x, y); % this doesnt work. This only show only the lastest x,y values
    end
end

3 个答案:

答案 0 :(得分:2)

使用hold on在多个plot来电的plot上添加更多值。我看到您正在使用hold all,但只有在打开数字时才能 。你最初没有打开数字,所以你需要这样做。因此,产生一个新的数字,使用hold on,然后使用您的代码。将所有点作为奇点绘制也是一个好主意。 plot默认以直线连接所有点,因此将'.'作为第三个参数附加到其中:

pws = 2000;
q0EF = 500;
EF_vec = [0.2, 0.5, 0.8, 0.9];
figure; %// Change
hold on;
for k=1:length(EF_vec)
    if(EF_vec(k) <= 1)
        i = 1;
        clearvars y x;
        for pwfi=0:100:pws
            pwfp = pws - (pws - pwfi )*EF_vec(k);
            y(i) = pwfp;
            x(i) = q0EF * (1 - 0.2*(pwfp/pws) - 0.8*(pwfp/pws)^2 );
            i = i + 1;
        end
        plot(x, y, '.'); %// Change
    end
end

答案 1 :(得分:0)

你可以使用plot(x,y,'x')生成一个散点图,并使用hold on绘制你应该在for循环之前打开的图。

figure;
% looops
plot(x, y, 'x');
hold on

当我使用它时你的代码可以正常工作,但你不能真正看到所有曲线,因为它们太靠近了。如果放大,你可以看到它们。

答案 2 :(得分:0)

尝试使用单元格数组

pws = 2000;
q0EF = 500;
EF_vec = [0.2, 0.5, 0.8, 0.9];

X = cell(size(EF_vec));
Y = cell(size(EF_vec));

for k=1:length(EF_vec)
    if(EF_vec(k) <= 1)
        i = 1;
        clearvars y x;
        for pwfi=0:100:pws
            pwfp = pws - (pws - pwfi )*EF_vec(k);
            y(i) = pwfp;
            x(i) = q0EF * (1 - 0.2*(pwfp/pws) - 0.8*(pwfp/pws)^2 );
            i = i + 1;
        end
        X{k} = x;
        Y{k} = y;
    end
end

X(cellfun(@isempty, X)) = [];
Y(cellfun(@isempty, Y)) = [];

plot(X{:}, Y{:});