Matlab 更改cfit绘图中的XLim
在曲线拟合对象的绘图中更改x范围(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对象,我们可以使
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
),您将看到实际的matlabplot
函数在绘制拟合对象的函数中被调用。语法不完全相同,这意味着您需要调用xlim([minLim,maxLim])代码>绘制函数后
plot(fit1,xdata, ydata);
xlim([minLim,maxLim]);
我不知道为什么会发生这种情况,因为他们实际上表示应该这样做。这可能是一个应该报告的错误。谢谢,这很有效!我可以用绘图(fit1,'predobs',0.95)
替换您的最后一行,并获得所需的图形。它是四行而不是一行,但这比评估拟合、下限、上限,然后手动绘制所有内容要好得多。我很高兴我能帮上忙。也许一位大师仍然会带来更好的解决方法我报告了这个bug——让我们希望他们能修复文档——或者更好,函数本身!