通过带有阴影区域的数据绘制最佳拟合线以获得错误

时间:2013-12-12 10:27:31

标签: matlab plot

我有以下数据:

dat = [9.3,0.6,0.4,0.7;...
    3.2,1.2,0.7,1.9;...
    3.9,1.8,0.7,1.9;...
    1.0,7.4,5.6,10.7;...
    4.7,1.0,0.5,1.3;...
    2.2,2.6,1.2,2.7;...
    7.2,1.0,0.5,1.1;...
    1.0,4.8,7.5,10.3;...
    2.7,1.8,1.7,4.0;...
    8.2,0.8,0.4,0.9;...
    1.0,4.9,5.7,8.2;...
    12.9,1.3,0.6,1.6;...
    7.7,0.8,0.5,1.3;...
    5.8,0.9,0.6,1.9;...
    1.1,4.5,6.2,12.1;...
    1.1,4.5,2.8,4.8;...
    16.4,0.3,0.3,0.5;...
    10.4,0.6,0.3,0.7;...
    2.2,3.1,2.2,4.6];

其中第一列显示观察值,第二列显示建模值,第三列和第四列分别显示最小值和最大值。

我可以用

绘制观察和建模之间的关系
scatter(d(:,1),d(:,2))

接下来,我想通过这些点画一条平滑的线来表明这种关系。如何才能做到这一点?显然,简单的直线在这里没什么用处。

其次,我想使用min和max(分别为第3和第4列)在建模值周围绘制阴影区域,以显示相关的错误。

我最终希望看到像

这样的东西

http://www.giss.nasa.gov/research/briefs/rosenzweig_03/figure2.gif

1 个答案:

答案 0 :(得分:1)

这样的东西?

%// Rename and sort your data
[x,I] = sort(dat(:,1));
y     = dat(I,2);
mins  = dat(I,3);
maxs  = dat(I,4);

%// Assume a model of the form y = A + B/x. Solve for A and B 
%// using least squares
P = [ones(size(x))  1./x] \ y;

%// Initialize figure
figure(1), clf, hold on
set(1,  'Renderer', 'OpenGl');

%// Plot "shaded" areas
fill([x; flipud(x)], [mins; flipud(maxs)], 'y',...
    'FaceAlpha', 0.2,...
    'EdgeColor', 'r');

%// Plot data and fit
legendEntry(1) = plot(x, P(1) + P(2)./x, 'b',...
    'LineWidth', 2);
legendEntry(2) = plot(dat(:,1), dat(:,2), 'r.',...
    'Markersize', 15);

Results