在“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).x
和 structarray)1).y
保存您的数据值。
然后您可以遍历结构数组并分别在每个块上调用 plot。
至于拟合可以使用fit
命令。它很复杂并且有很多选项,因此您应该先查看帮助(在控制台中键入 doc fit
以获得内联帮助,这与网站帮助的内容相同)。简短的版本是你可以像这样做一个简单的线性拟合
[fitobject, gof] = fit(x, y, 'poly1');
其中 'poly1' 指定您想要一阶多项式(即直线),输出参数为您提供一个拟合对象,您可以使用它做各种事情,例如绘图或插值,第二个给您一个结构,其中包含 r^2 和调整后的 r^2。 fitobject 还包含您的拟合系数。
我只是在“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).x
和 structarray)1).y
保存您的数据值。
然后您可以遍历结构数组并分别在每个块上调用 plot。
至于拟合可以使用fit
命令。它很复杂并且有很多选项,因此您应该先查看帮助(在控制台中键入 doc fit
以获得内联帮助,这与网站帮助的内容相同)。简短的版本是你可以像这样做一个简单的线性拟合
[fitobject, gof] = fit(x, y, 'poly1');
其中 'poly1' 指定您想要一阶多项式(即直线),输出参数为您提供一个拟合对象,您可以使用它做各种事情,例如绘图或插值,第二个给您一个结构,其中包含 r^2 和调整后的 r^2。 fitobject 还包含您的拟合系数。