2014-08-28 70 views
0

我无法在曲线拟合对象的图中更改x范围(XLim)。在cfit图中更改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) 

的问题

当我们现在变更情节的XLIM使用set(gca, 'XLim', [0,2]),绘图更新但拟合曲线没有扩展。你可以这样做自动的从plot命令中,但它的文档suggests不为我工作:

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的配合​​(一个GUI包装为fit),我可以进入XLIM在Tools->Axes Limits之下。然后在整个范围内显示拟合函数。我怎样才能以编程方式做到这一点?

我知道你可以评估一个给定范围的拟合函数,但是当你必须为置信区间和几个拟合做这些时,这会变得单调乏味。我正在寻找一种更简单的方法,并且我认为我只是错了plot命令。

回答

1

该文档说,绘制拟合对象时,它会外推到当前的轴限制。在更改绘图限制后,它不会重新绘制线条。此外,看起来当你超载阴谋它绘制fitdata作为xdata/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。

+0

谢谢,这个作品!我可以用'plot(fit1,'predobs',0.95)'替换你的最后一行,并获得所需的图形。它是四行而不是一行,但比评估拟合度,下限和上限要好得多,然后手动绘制所有内容。 – 2014-08-28 14:05:19

+0

我很高兴能帮上忙。也许大师仍然会带着更好的方法 – Trogdor 2014-08-28 15:52:55

0

您用于绘制fit对象的函数plot实际上超载了标准的plot函数。如果你试图设置一个断点(如果错误)(dbstop error),你会发现实际的matlab plot函数在绘制拟合对象的函数中被调用。语法是那么不完全一样的,这意味着你需要调用xlim([minLim,maxLim]);你绘制的功能

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

我不知道后为什么出现这种情况,因为在matlabs documentation他们实际上表明它应该工作。这可能是一个应该报告的错误。

+0

我报告了这个错误 - 让我们希望他们修复文档 - 或者更好的是,函数本身! – 2014-08-28 14:06:43