在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谢谢你的帮助