# Plot deviation of curve as shaded area inside

17 views (last 30 days)
Sokratis Panagiotidis on 22 Jul 2022
Hi,
A common question here in this forum is how to plot an area between two curves.
Here's one type of a common answer:
x = transpose(1:100);
y = x.^2;
curve1 = y*1.05;
curve2 = y*0.95;
x2 = [x flipud(x)];
inBetween = [curve1, curve2];
fill(x2, inBetween, 'k', 'LineStyle', 'none');
hold on;
plot(x, y, 'r', 'LineWidth', 2);
This is the result I get:
I used
alpha(.1)
to make the shaded area transparent.
What I would like to have is the area between those two curves shaded, since I want to show the red curve's deviation without having to use the green lines. Hence why I removed the Linestyle. But I get something like a linear fill between the starting and endpoint of the vectors.
How can I do that without too many lines of code? I'm afraid my laptop is at a certain limit with the actual length of vectors I have to plot (>800.000 values).
Also if you know if and how it's possible to alternate the shaded area like a zebra (white-black-white-black, etc) I'd appreciate if you tell me that!
Thank you!

Star Strider on 22 Jul 2022
I generally prefer patch to fill
x = transpose(1:100);
y = x.^2;
curve1 = y*1.05;
curve2 = y*0.95;
x2 = [x flipud(x)];
inBetween = [curve1 curve2];
patch([x; flip(x)], [inBetween(:,1); flip(inBetween(:,2))], 'k', 'LineStyle', 'none', 'FaceAlpha',0.25);
hold on;
plot(x, y, 'r', 'LineWidth', 2);
The approach to writing patch calls is to provide a defined area that the function can fill. Here, that is provided by plotting ‘curve1’ against ‘x’ and then plotting ‘flip(curve2)’ against ‘flip(x)’ completing the region to be filled.
.
Sokratis Panagiotidis on 22 Jul 2022
Hey man thanks a lot!
This is what I was looking for.
Star Strider on 22 Jul 2022
As always, my pleasure!

Bjorn Gustavsson on 22 Jul 2022
Edited: Bjorn Gustavsson on 22 Jul 2022
Have a look at the file exchange. There there are multiple "shaded-error-plots". For example (without ordering of merit):
I have used a majority of these functions at different times to god result, now I have no memory of why one or the other was preferable.
HTH
##### 3 CommentsShow 1 older commentHide 1 older comment
Bjorn Gustavsson on 22 Jul 2022
In what ways were those functions unsuitable for your data?
Sokratis Panagiotidis on 23 Jul 2022
This is what I get when using errorfill:
Unable to perform assignment because the indices on the left side are not compatible with the
size of the right side.
Error in errorfill (line 111)
E(:,n)= [y+temp(1,:) y(end:-1:1)-temp(2,end:-1:1)];
Error in Errorfill_Test (line 7)
errorfill(x, y, E3, '.');
My vector has almost 600 thousand entries so it's hard to tell what the problem is.