让我们假设我们有以下代码
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
我的问题是:如何对齐方程式?例如左上角的尺寸?提前谢谢
答案 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
以下是最终结果:
我不知道这是否符合您的需求......但是开发一种算法来找到一个非重叠部分的情节,其中放置文本对我来说就像是一种矫枉过正。尽管文本距离预测线很远,但它仍然优雅,清晰且易于理解。同样更快的解决方法是将回归方程设置为绘图标题(闪烁闪烁)。