Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中将回归方程对齐到正确的位置_Matlab - Fatal编程技术网

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

在matlab中将回归方程对齐到正确的位置,matlab,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), theS

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

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
该方程的输出如下图所示


我的问题是:如何使方程偏离直线?比如左上角的尺寸?提前感谢

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

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

不久前,我正在为同样的问题寻找解决方案。如您所知,
legend
命令允许指定一个
位置
参数,其众多选项中的一个称为
best
,在Matlab官方文档()中描述如下:

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

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

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
以下是最终结果:


我不知道这是否能满足你的需要。。。但在我看来,开发一种算法来寻找一个不重叠的部分来放置一个文本,这看起来太过分了。尽管文本与预测线相距甚远,但仍然优雅、清晰、易懂。同样的,还有一个更快的解决方法,就是将回归方程设置为绘图标题(闪烁)。

不久前,我正在为同样的问题寻找解决方案。如您所知,
legend
命令允许指定一个
位置
参数,其众多选项中的一个称为
best
,在Matlab官方文档()中描述如下:

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

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

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
以下是最终结果:


我不知道这是否能满足你的需要。。。但在我看来,开发一种算法来寻找一个不重叠的部分来放置一个文本,这看起来太过分了。尽管文本与预测线相距甚远,但仍然优雅、清晰、易懂。这同样适用于更快的解决方法,包括将回归方程设置为绘图标题(闪烁)。

谢谢你的帮助,我的朋友,我使用ginput命令,但我可以不经目视检查自动执行吗?+1谢谢你的帮助,我的朋友,我使用ginput命令,但是我可以不用目视检查就自动完成吗?+1谢谢你的帮助