我只是在'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,但那没用。
任何人都可以告诉我如何
- 绘制两组图表
- 如何画一条最佳拟合线得到回归系数?
答案 0 :(得分:1)
第一部分可以通过多种方式完成。我会测试第二列的zeroness
zerodata = A(:,2) == 0;
将为您提供1和0的逻辑数组,如[1 1 1 0 1 0 0 ...]。然后你可以用它来分割你的输入。你可以查看该数组的diff
并测试它的正号或负号。您的数据从0开始,因此您无法获得该数据的转换,因此您需要考虑某种方式来处理该情况或相反的情况,除非您确定它始终是一种方式或者其他。您可以只测试第一个元素,也可以在输入数组的开头插入一个已知值。
然后你必须存储你的块。由于它们可能具有可变长度和可变数字,因此您不会将它们放入大矩阵中,但您仍然希望能够使用循环。我会使用一个单元格数组,其中一行中的每个单元格包含一个块的x或y数据,或者一个结构数组,其中说structarray(1).x
和structarray)1).y
保存您的数据值。
然后你可以遍历你的struct数组并分别在每个chunk上调用plot。
至于拟合,您可以使用fit
命令。它很复杂并且有很多选项,所以你应该首先查看帮助(在控制台中键入doc fit
以获得内联帮助,这与内容中的网站帮助相同)。简短的版本是你可以像这样做一个简单的线性拟合
[fitobject, gof] = fit(x, y, 'poly1');
其中'poly1'指定你想要一阶多项式(即直线),输出参数给你一个拟合对象,你可以用绘图或插值做各种事情,第二个给你一个包含的结构其他东西r ^ 2和调整r ^ 2。 fitobject还包含您的拟合系数。