Matlab 更改cfit绘图中的XLim

Matlab 更改cfit绘图中的XLim,matlab,plot,Matlab,Plot,在曲线拟合对象的绘图中更改x范围(XLim)时遇到问题 准备一个最简单的示例 让我们使用曲线拟合工具箱中的fit,定义噪声数据并对其拟合函数 xdata = (0:0.1:1)'; noise = 0.1*randn(size(xdata)); ydata = xdata.^2 + noise; f = fittype('a*x.^2 + b'); fit1 = fit(xdata, ydata, f, 'StartPoint', [1,1]); fit1现在是一个cfit对象,我们可以使

在曲线拟合对象的绘图中更改x范围(XLim)时遇到问题

准备一个最简单的示例

让我们使用曲线拟合工具箱中的
fit
,定义噪声数据并对其拟合函数

xdata = (0:0.1:1)'; 
noise = 0.1*randn(size(xdata));
ydata = xdata.^2 + noise;
f = fittype('a*x.^2 + b'); 
fit1 = fit(xdata, ydata, f, 'StartPoint', [1,1]);
fit1
现在是一个cfit对象,我们可以使用其(重载)
plot
方法对其进行绘图:

plot(fit1, xdata, ydata)
问题

当我们现在使用
set(gca,'XLim',[0,2])
更改绘图的XLim时,绘图会更新,但拟合曲线不会延伸。您可以在
plot
命令中自动执行此操作的文档,但对于我来说不适用:

plot(fit1, xdata, ydata, 'XLim', [0, 1])

-> Subscript indices must either be real positive integers or logicals.

-> Error in cfit/plot (line 228)
->   handles = plot(xpoints(~outliers),ypoints(~outliers),S2,... 
如果我使用
cftool
进行拟合(适用于
fit
的GUI包装),我可以在
Tools->Axes Limits
下输入XLim。然后显示整个范围的拟合功能。如何以编程方式执行此操作


我知道你可以评估给定范围内的拟合函数,但是当你必须对置信区间和多次拟合进行评估时,这就变得单调乏味了。我正在寻找一种更简单的方法,我想我只是把
plot
命令用错了

文档中说,绘制拟合对象时,它将外推到当前轴限制。更改打印限制后,它不会重新绘制线。此外,重载打印时,它似乎会将fitdata打印为与扩展数据/ydata相同的长度。为了实现你的目标,你可以

figure; hold on
plot(xdata,ydata,'.')
ext_xdata = 0:0.1:2;
plot(ext_xdata,fit1.a*ext_xdata.^2 + fit1.b,'r')
但您暗示,由于应用程序的复杂性,上述解决方案对您来说是不可取的。另一种方法是

figure; hold on
plot(xdata,ydata,'.')
set(gca,'xlim',[0, 2]);
plot(fit1)

这不是一个像您所寻找的那样的单线解决方案,但它消除了指定新xrange的需要。

用于绘制
fit
对象的函数
plot
实际上重载了标准
plot
函数。如果尝试设置断点If error(
dbstop error
),您将看到实际的matlab
plot
函数在绘制拟合对象的函数中被调用。语法不完全相同,这意味着您需要调用
xlim([minLim,maxLim])绘制函数后

plot(fit1,xdata, ydata);
xlim([minLim,maxLim]);

我不知道为什么会发生这种情况,因为他们实际上表示应该这样做。这可能是一个应该报告的错误。

谢谢,这很有效!我可以用
绘图(fit1,'predobs',0.95)
替换您的最后一行,并获得所需的图形。它是四行而不是一行,但这比评估拟合、下限、上限,然后手动绘制所有内容要好得多。我很高兴我能帮上忙。也许一位大师仍然会带来更好的解决方法我报告了这个bug——让我们希望他们能修复文档——或者更好,函数本身!