matlab中多条散点线的独立lslines
independent lslines for multiple scatter lines in matlab
我有一个看起来像这样的散点图:
现在我想添加这些点的最小二乘拟合,所以我在 Matlab 中使用 lsline 命令来完成。这就是我得到的
这个图的问题是所有数据都是针对一个共同的 x 值范围绘制的。我认为 Matlab 从上面的散点图中提取了 x 值的最大范围,然后将其用作所有 lsline 拟合的公共值。我不想要这个。我想要独立散点图的独立线,并且每条线的 xvalues 应该是独立的,而不是共同的。
有办法吗?如果不是 lsline,也许还有其他命令?
我看到有 2 种可能性可以解决您的问题。我从我喜欢的方法开始,第二种方法是另一种方法。
方法:
使用 polyval
和 polyfit
函数。对于每个数据集,执行以下操作:
p1 = polyfit(x1,y1,1); % coefficients of the polynomial
y1_ls = polyval(p1,x1); % least squared fit values
通过这种方式,您可以准确指定要使用的 x 值和相应的 y 值。
方法:获取lslines
参数。如果您 运行 带有行 h = lsline;
的代码,您将存储最小二乘拟合的所有属性。在那里您可以手动更改 x 数据集和 y 数据集。例如第一行:
h(1).XData = xnew;
h(1).YData = ynew;
缺点是您必须使用线性插值来提供良好的 y 值。
我希望这有助于回答您的问题?
如果您想坚持使用 Isline
并且不插入数据或获取线条的参数,您可以执行以下操作:
% some arbitrary data:
x1 = 1:10;
y1 = x1 + randn(1,numel(x1));
x2 = 1:20;
y2 = 2*x2 + randn(1,numel(x2));
x3 = 1:30;
y3 = 3*x3 + randn(1,numel(x3));
data = {[x1;y1],[x2;y2],[x3;y3]}; % concat the data to a cell array
color = lines(numel(data)); % choose colors for the lines
L = zeros(2,2,numel(data));
for k = 1:numel(data)
scatter(data{k}(1,:),data{k}(2,:),[],color(k,:))
h = lsline;
L(:,:,k) = [h.XData.' h.YData.'];
cla
end
% plot all the data again, and add the lines:
hold on
for k = 1:numel(data)
scatter(data{k}(1,:),data{k}(2,:),[],color(k,:))
plot(L(:,1,k),L(:,2,k))
end
hold off
结果:
我有一个看起来像这样的散点图:
现在我想添加这些点的最小二乘拟合,所以我在 Matlab 中使用 lsline 命令来完成。这就是我得到的
这个图的问题是所有数据都是针对一个共同的 x 值范围绘制的。我认为 Matlab 从上面的散点图中提取了 x 值的最大范围,然后将其用作所有 lsline 拟合的公共值。我不想要这个。我想要独立散点图的独立线,并且每条线的 xvalues 应该是独立的,而不是共同的。
有办法吗?如果不是 lsline,也许还有其他命令?
我看到有 2 种可能性可以解决您的问题。我从我喜欢的方法开始,第二种方法是另一种方法。
方法: 使用
polyval
和polyfit
函数。对于每个数据集,执行以下操作:p1 = polyfit(x1,y1,1); % coefficients of the polynomial y1_ls = polyval(p1,x1); % least squared fit values
通过这种方式,您可以准确指定要使用的 x 值和相应的 y 值。
方法:获取
lslines
参数。如果您 运行 带有行h = lsline;
的代码,您将存储最小二乘拟合的所有属性。在那里您可以手动更改 x 数据集和 y 数据集。例如第一行:h(1).XData = xnew; h(1).YData = ynew;
缺点是您必须使用线性插值来提供良好的 y 值。
我希望这有助于回答您的问题?
如果您想坚持使用 Isline
并且不插入数据或获取线条的参数,您可以执行以下操作:
% some arbitrary data:
x1 = 1:10;
y1 = x1 + randn(1,numel(x1));
x2 = 1:20;
y2 = 2*x2 + randn(1,numel(x2));
x3 = 1:30;
y3 = 3*x3 + randn(1,numel(x3));
data = {[x1;y1],[x2;y2],[x3;y3]}; % concat the data to a cell array
color = lines(numel(data)); % choose colors for the lines
L = zeros(2,2,numel(data));
for k = 1:numel(data)
scatter(data{k}(1,:),data{k}(2,:),[],color(k,:))
h = lsline;
L(:,:,k) = [h.XData.' h.YData.'];
cla
end
% plot all the data again, and add the lines:
hold on
for k = 1:numel(data)
scatter(data{k}(1,:),data{k}(2,:),[],color(k,:))
plot(L(:,1,k),L(:,2,k))
end
hold off
结果: