MATLAB,填充两组数据之间的区域,一个图中的行

我有一个关于使用areafunction的问题; 或者也许另一个function是为了…我从一个大的文本文件创build这个情节:

http://img818.imageshack.us/img818/9519/iwantthisareafilledin.jpg

绿色和蓝色代表两个不同的文件。 我想要做的是分别填写红线和每次运行之间的区域。 我可以创build一个具有类似想法的区域图,但是当我将它们绘制在同一个图上时,它们不会正确重叠。 基本上,4个地块将在一个数字。

我希望这是有道理的。

根据@ gnovice的答案,实际上只能在两条曲线之间的区域内用阴影创build填充图。 只需使用与fliplr一起fill

例:

 x=0:0.01:2*pi; %#initialize x array y1=sin(x); %#create first curve y2=sin(x)+.5; %#create second curve X=[x,fliplr(x)]; %#create continuous x value array for plotting Y=[y1,fliplr(y2)]; %#create y values for out and then back fill(X,Y,'b'); %#plot filled area 

在这里输入图像描述

通过翻转x数组并将它与原始数据连接起来,就可以向外,向下,向后,然后向上closures两个数组,完成一个完整的,多边形的多边形。

您可以使用函数FILL在您的图的部分下创build填充的多边形。 您将要按照您希望它们堆叠在屏幕上的顺序来绘制线条和多边形,从最底部开始。 以下是一些示例数据的示例:

 x = 1:100; %# X range y1 = rand(1,100)+1.5; %# One set of data ranging from 1.5 to 2.5 y2 = rand(1,100)+0.5; %# Another set of data ranging from 0.5 to 1.5 baseLine = 0.2; %# Baseline value for filling under the curves index = 30:70; %# Indices of points to fill under plot(x,y1,'b'); %# Plot the first line hold on; %# Add to the plot h1 = fill(x(index([1 1:end end])),... %# Plot the first filled polygon [baseLine y1(index) baseLine],... 'b','EdgeColor','none'); plot(x,y2,'g'); %# Plot the second line h2 = fill(x(index([1 1:end end])),... %# Plot the second filled polygon [baseLine y2(index) baseLine],... 'g','EdgeColor','none'); plot(x(index),baseLine.*ones(size(index)),'r'); %# Plot the red line 

这是由此产生的结果:

在这里输入图像描述

您也可以通过修改轴对象的'Children'属性中的手柄顺序来绘制graphics中的对象的堆叠顺序。 例如,此代码反转堆叠顺序,将绿色多边形隐藏在蓝色多边形后面:

 kids = get(gca,'Children'); %# Get the child object handles set(gca,'Children',flipud(kids)); %# Set them to the reverse order 

最后,如果你不知道你想要提前堆叠你的多边形的顺序(也就是说可能是更小的多边形,你可能想要在顶部),那么你可以调整'FaceAlpha'属性 ,或者两个多边形都将显示为部分透明,并显示其下方的其他多边形。 例如,以下将使绿色多边形部分透明:

 set(h2,'FaceAlpha',0.5); 

就我个人而言,我觉得包装填充function既优雅又方便。 要填充共享支持X (和颜色C)的两个大小相等的行向量Y1Y2

 fill_between_lines = @(X,Y1,Y2,C) fill( [X fliplr(X)], [Y1 fliplr(Y2)], C ); 

你想看看patch()函数,并潜入点的水平线的开始和结束:

 x = 0:.1:2*pi; y = sin(x)+rand(size(x))/2; x2 = [0 x 2*pi]; y2 = [.1 y .1]; patch(x2, y2, [.8 .8 .1]); 

如果您只想填充部分数据,则需要截断x和y向量以仅包含所需的点。