繁体   English   中英

如何 plot MATLAB 中每个向量的第一个点

[英]How to plot the first point of each vector in MATLAB

我在 MATLAB 中有 8 个向量,尺寸为 1x18,我计算如下:

i = 19
for c = 1:i
    rpm_new(c) = c*250;
end

for c = 1:i-1
    lambda_avg(c) = mean(sw1.Lambda((sw1.RPM >=rpm_new(c)) & sw1.RPM < rpm_new(c+1)));
    lambda_avg2(c) = mean(sw2.Lambda((sw2.RPM >=rpm_new(c)) & sw2.RPM < rpm_new(c+1)));
    lambda_avg3(c) = mean(sw3.Lambda((sw3.RPM >=rpm_new(c)) & sw3.RPM < rpm_new(c+1)));
    lambda_avg4(c) = mean(sw4.Lambda((sw4.RPM >=rpm_new(c)) & sw4.RPM < rpm_new(c+1)));
    lambda_avg5(c) = mean(sw5.Lambda((sw5.RPM >=rpm_new(c)) & sw5.RPM < rpm_new(c+1)));
    lambda_avg6(c) = mean(sw6.Lambda((sw6.RPM >=rpm_new(c)) & sw6.RPM < rpm_new(c+1)));
    lambda_avg7(c) = mean(sw7.Lambda((sw7.RPM >=rpm_new(c)) & sw7.RPM < rpm_new(c+1)));
    lambda_avg8(c) = mean(sw8.Lambda((sw8.RPM >=rpm_new(c)) & sw8.RPM < rpm_new(c+1)));
end

现在,我希望能够 plot 每个向量的第一个元素在 x 坐标 1,所以

scatter(1,lambda_avg(1))
hold on
scatter(1,lambda_avg2(1))
...

然后我想 plot 每个向量的第二个元素在 x 坐标 2,所以像

scatter(2,lambda_avg(2))
hold on
scatter(2,lambda_avg2(2))
...

是否有可能以一种聪明的方式做到这一点,并在一个 plot 中做到这一点? 是否也可以将向量中的每个点连接在一起? 这样来自lambda_avg的所有点都由一条线连接,对于lambda_avg2

使用矩阵而不是单个向量来存储您的结果。

一种更简洁的方法是也使用第二个循环(这取决于您还使用sw.Lambda1, sw.Lambda2, ...而不是sw1.Lambda, sw2.Lambda, ... ,这是一个更好的选择)。 如果需要,您可以使用 8 条单独的行来分配矩阵的行。

lambda_avg = zeros(8,i-1);
for r = 1:8
    swr = sw.(['Lambda' num2str(r)]); % sw.Lambda1, sw.Lambda2, ...
    for c = 1:i-1
        lambda_avg(r,c) = mean(swr.Lambda((swr.RPM >=rpm_new(c)) & swr.RPM < rpm_new(c+1))); 
    end       
end

然后 plot 事情要容易得多,只需一次呼叫,无需hold

plot( 1:8, lambda_avg, '.k' );

请注意,您可能会进一步对其进行矢量化以删除两个循环中的至少一个,但这超出了这个问题的 scope 的范围,因为它需要更改您之前的代码。 此处的文档中阅读有关 MATLAB 矢量化的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM