Matlab 2016a中如何单独设置lsline的X轴显示范围?
在Matlab 2016a中单独控制lsline回归线的显示范围
我太懂这个烦恼了——lsline确实会默认跟着当前坐标轴的范围来画完整的回归线,完全不管对应散点的实际数据区间,在2016a版本里也确实没有直接设置范围的属性。不过咱们可以换个思路:放弃依赖lsline自动生成,手动对每个散点组拟合回归,然后自己绘制限定范围的线条,这样就能精准控制每条线的起止点了。
方法一:手动拟合+绘制限定范围的回归线
这是最直接可控的方式,步骤很清晰:
- 对每个散点组,用
polyfit计算线性回归的斜率和截距(线性回归就是一次多项式拟合) - 获取当前组x数据的最小和最大值,作为回归线的起止范围
- 生成该范围内的x序列,计算对应的y值,用
plot绘制线条,颜色和散点保持一致
给你修改后的完整代码示例:
% 假设你已经定义了myColours颜色矩阵 myColours = [0.1 0.3 0.5; 0.7 0.2 0.4]; % 示例颜色,可替换成你的实际颜色 hold on; % 开启绘图保持,确保所有图都画在同一窗口 for i=1:2 % 替换成你的实际x、y数据 x = rand(50,1)*0.3; % 示例x,范围0~0.3 y = 1.8*x + 0.4 + randn(50,1)*0.1; % 示例y,带点噪声 % 绘制散点 scatter(x, y, 50, 'MarkerFaceColor', myColours(i, :)); % 拟合线性回归:p(1)是斜率,p(2)是截距 p = polyfit(x, y, 1); % 确定当前组的x范围 x_min = min(x); x_max = max(x); % 生成回归线的x序列(100个点足够平滑) x_line = linspace(x_min, x_max, 100); % 计算对应的y值 y_line = p(1)*x_line + p(2); % 绘制限定范围的回归线,颜色和散点匹配 plot(x_line, y_line, 'Color', myColours(i, :), 'LineWidth', 1.5); end hold off;
方法二:修改已生成的lsline线条(如果已经用了lsline)
如果你已经用lsline生成了线条,也可以事后修改每条线的XData和YData,但前提是你要保存每个散点组的x、y数据:
% 先保存每个组的x、y数据和x范围 x_groups = cell(2,1); y_groups = cell(2,1); x_ranges = zeros(2,2); hold on; for i=1:2 x_groups{i} = ...; % 你的实际x数据 y_groups{i} = ...; % 你的实际y数据 scatter(x_groups{i}, y_groups{i}, 50, 'MarkerFaceColor', myColours(i, :)); x_ranges(i,:) = [min(x_groups{i}), max(x_groups{i})]; end % 生成默认回归线 h_lines = lsline; % 逐个修改每条回归线的范围 for i=1:length(h_lines) % 重新拟合当前组的回归参数 p = polyfit(x_groups{i}, y_groups{i}, 1); x_min = x_ranges(i,1); x_max = x_ranges(i,2); x_line = linspace(x_min, x_max, 100); y_line = p(1)*x_line + p(2); % 更新线条的X和Y数据 set(h_lines(i), 'XData', x_line, 'YData', y_line); % 顺便把线条颜色和散点匹配(lsline可能自动选色) set(h_lines(i), 'Color', myColours(i, :)); end hold off;
两种方法里,我更推荐第一种——手动拟合绘制,不仅能精准控制范围,还能保证线条颜色和散点完全一致,避免lsline自动选色可能带来的混乱。
内容的提问来源于stack exchange,提问作者z8080
相关产品推荐
相关产品推荐

