在“for”循环 MATLAB 中绘制同一张图上的不同数据集

Graphing different sets of data on same graph within a ‘for’ loop MATLAB

我只是在“for”循环中在同一张图上绘制不同的图时遇到了问题。我希望有人能给我指出正确的方向。

我有一个二维数组,零中包含离散的数据块。我的数据如下:

A=

    0           0
    0           0
    0           0
    3           9
    4          10
    5          11
    6          12
    0           0
    0           0
    0           0
    0           0
    7         9.7
    8         9.8
    9         9.9
    0           0
    0       0

数据块被定义为连续的数据集,没有 [0 0] 行的中断。所以在这个例子中,第一个数据块是

    3           9
    4          10
    5          11
    6          12

第二块是

    7        9.7
    8        9.8
    9        9.9

第一列是x,第二列是y。我想将 y 绘制为 x 的函数(x 是水平轴,y 是垂直轴)我遇到了一大块数据。在这种情况下,我将有 2 组点和 2 条最佳拟合线(因为我有 2 个数据块)。我还想计算 R 平方值

我目前的代码如下所示:

fh1 = figure;
hold all;
ah1 = gca;

% plot graphs:
for d = 1:max_number_zeros+num_rows
    if sequence_holder(d,1)==0
        continue;
    end
    c = d;

    while sequence_holder(c,1)~=0
        plot(ah1,sequence_holder(c,1),sequence_holder(c,num_cols),'*');
        %lsline;
        c =c+1;
        continue;
    end
end

序列持有者是其中包含数据的数组。我只能绘制第一组数据,没有最佳拟合线。我试过 lsline,但没用。

谁能告诉我怎么做

-绘制两组图

-如何画一条最佳拟合线得到回归系数?

第一部分可以通过多种方式完成。我会测试第二列的零度

zerodata = A(:,2) == 0;

这将为您提供一个由 1 和 0 组成的逻辑数组,例如 [1 1 1 0 1 0 0 ...]。然后你可以用它来分割你的输入。您可以查看该数组的 diff 并测试它的正号或负号。你的数据从 0 开始,所以你不会得到那个的转换,所以你需要想办法处理这种情况或相反的情况,除非你确定它总是一种方式或其他。您可以只测试第一个元素,也可以在输入数组的开头插入一个已知值。

然后您将不得不存储您的块。由于它们可能具有可变长度和可变数量,因此您不会将它们放入大矩阵中,但您仍然希望能够使用循环。我会使用一个单元格数组,其中一行中的每个单元格包含一个块的 x 或 y 数据,或者一个结构数组,其中 structarray(1).xstructarray)1).y 保存您的数据值。

然后您可以遍历结构数组并分别在每个块上调用 plot。

至于拟合可以使用fit命令。它很复杂并且有很多选项,因此您应该先查看帮助(在控制台中键入 doc fit 以获得内联帮助,这与网站帮助的内容相同)。简短的版本是你可以像这样做一个简单的线性拟合

[fitobject, gof] = fit(x, y, 'poly1');

其中 'poly1' 指定您想要一阶多项式(即直线),输出参数为您提供一个拟合对象,您可以使用它做各种事情,例如绘图或插值,第二个给您一个结构,其中包含 r^2 和调整后的 r^2。 fitobject 还包含您的拟合系数。