在matlab中将回归方程对齐到正确的位置

时间:2018-02-23 17:32:22

标签: matlab

让我们假设我们有以下代码

function plot_test(x,y)
x_constucted=[ones(size(x)) x];
b = regress(y,x_constucted);
y_predicted=b(1)+b(2)*x;
scatter(x,y);
hold on
plot(x,y_predicted);
theString = sprintf('y = %.3f*x+%.3f ', b(2), b(1));
text(x(1), y_predicted(1), theString, 'FontSize', 8);

end

该等式的输出如下图所示 enter image description here

我的问题是:如何对齐方程式?例如左上角的尺寸?提前谢谢

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您想要将打印的等式移出点。查看text()函数说明。前两个值定义文本图中的x和y位置。 X = 1; Y = 25; 要将其向上移动,请在文本中使用新变量(x,y,...)。希望有所帮助。

答案 1 :(得分:1)

前段时间我正在为同样的问题寻找解决方案。您可能知道,legend命令允许指定Location参数,其中一个选项称为best,在官方Matlab文档(here)中描述为如下:

  

与绘图数据发生冲突最少的内轴

我的解决方法滥用此功能,以便找到在绘图中放置单个文本注释的最佳位置。下面的代码使用内置数据集,因为您没有指定数据的外观:

load carsmall;

x = [ones(size(Horsepower)) Horsepower];
y = MPG;
b = regress(y,x);

y_hat = b(1) + b(2) .* Horsepower;
scatter(Horsepower,y);
hold on;
plot(Horsepower,y_hat);
text_at_best(sprintf('y = %.3f*x+%.3f ',b(2),b(1)),'FontSize',12);

function h = text_at_best(txt,varargin)
    l = legend(txt,[varargin{:}]);

    t = annotation('textbox',varargin{:});
    t.String = txt;
    t.Position = l.Position;
    t.LineStyle = 'None';

    delete(l);

    if nargout
        h = t;
    end
end

以下是最终结果:

Result

我不知道这是否符合您的需求......但是开发一种算法来找到一个非重叠部分的情节,其中放置文本对我来说就像是一种矫枉过正。尽管文本距离预测线很远,但它仍然优雅,清晰且易于理解。同样更快的解决方法是将回归方程设置为绘图标题(闪烁闪烁)。