matlab中多条散点线的独立lslines

independent lslines for multiple scatter lines in matlab

我有一个看起来像这样的散点图:

现在我想添加这些点的最小二乘拟合,所以我在 Matlab 中使用 lsline 命令来完成。这就是我得到的

这个图的问题是所有数据都是针对一个共同的 x 值范围绘制的。我认为 Matlab 从上面的散点图中提取了 x 值的最大范围,然后将其用作所有 lsline 拟合的公共值。我不想要这个。我想要独立散点图的独立线,并且每条线的 xvalues 应该是独立的,而不是共同的。

有办法吗?如果不是 lsline,也许还有其他命令?

我看到有 2 种可能性可以解决您的问题。我从我喜欢的方法开始,第二种方法是另一种方法。

  1. 方法: 使用 polyvalpolyfit 函数。对于每个数据集,执行以下操作:

    p1 = polyfit(x1,y1,1);      % coefficients of the polynomial
    y1_ls = polyval(p1,x1);     % least squared fit values
    

    通过这种方式,您可以准确指定要使用的 x 值和相应的 y 值。

  2. 方法:获取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

结果: