在'for'循环MATLAB中在同一图形上绘制不同的数据集

时间:2015-05-05 09:30:41

标签: matlab for-loop plot regression

我只是在'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,但那没用。

任何人都可以告诉我如何

- 绘制两组图表

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

1 个答案:

答案 0 :(得分:1)

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

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

将为您提供1和0的逻辑数组,如[1 1 1 0 1 0 0 ...]。然后你可以用它来分割你的输入。你可以查看该数组的diff并测试它的正号或负号。您的数据从0开始,因此您无法获得该数据的转换,因此您需要考虑某种方式来处理该情况或相反的情况,除非您确定它始终是一种方式或者其他。您可以只测试第一个元素,也可以在输入数组的开头插入一个已知值。

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

然后你可以遍历你的struct数组并分别在每个chunk上调用plot。

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

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

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