z80*_*080 2 matlab regression least-squares
我创建了两个散点图,然后使用lsline为每个图添加回归线。我使用以下代码:
for i=1:2
x = ..;
y = ..;
scatter(x, y, 50, 'MarkerFaceColor',myColours(i, :));
end
h_lines = lsline;
Run Code Online (Sandbox Code Playgroud)
但是,较深的线远远超出了该散点图中的最后一个数据点(大约在x = 0.3处):
lsline似乎没有允许设置其水平范围的属性。在Matlab 2016a中,是否有一种解决方法可分别为这两行设置此设置?
这是一种解决方法,而不是解决方案。lsline内部调用refline,它会绘制一条由其当前限制(xlim和ylim)给出的填充轴的线。因此,您可以将这些限制更改为所需的范围,致电lsline,然后恢复这些限制。
例:
x = randn(1,100);
y = 2*x + randn(1,100); % random, correlated data
plot(x, y, '.') % scatter plot
xlim([-1.5 1.5]) % desired limit for line
lsline % plot line
xlim auto % restore axis limit
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以依次对每个数据集应用相同的过程,但是在调用时,只需要保持一个数据集可见即可lsline。否则,当您调用它以创建第二行时,它还将创建第一行的新版本(范围错误)。
例:
x = randn(1,100); y = 2*x + randn(1,100); % random, correlated data
h = plot(x, y, 'b.'); % scatter plot
axis([min(x) max(x) min(y) max(y)]) % desired limit for line
lsline % plot line
xlim auto % restore axis limit
hold on
x = 2*randn(1,100) - 5; y = 1.2*x + randn(1,100) + 6; % random, correlated data
plot(x, y, 'r.') % scatter plot
axis([min(x) max(x) min(y) max(y)]) % desired limit for line
set(h, 'HandleVisibility', 'off'); % hide previous plot
lsline % plot line
set(h, 'HandleVisibility', 'on'); % restore visibility
xlim auto % restore axis limit
Run Code Online (Sandbox Code Playgroud)