MATLAB: How to fill the area between two line in a log log plot

areaMATLABplot

Hi,
I want to shade the area between the lower and upper curve. I attached the dat. file so you can use this. The following simple code has been used to generate the given figure.
load limit.dat
a=limit(:,1);
upper=limit(:,2);
lower=limit(:,3);
avg=limit(:,4);
loglog(a,avg,a,upper,a,lower)
Can anybody please come with an idea. Thanks in advance.
Cheers!!
Pavel

Best Answer

You need to edit your data to be only those greater than zero (negative and zero values will not plot on a loglog plot anyway, so you lose nothing by eliminating them), then a simple patch call works:
fidi = fopen('Mainul Hoque limit.txt','r');
limitc = textscan(fidi, '%f%f%f%f', 'CollectOutput',1);
limit = limitc{:};
a=limit(:,1);
upper=limit(:,2);
lower=limit(:,3);
avg=limit(:,4);
idx = upper>0 & lower>0 & avg>0; % Eliminate Negative & Zero Data
figure(1)
patch([a(idx)' fliplr(a(idx)')], [lower(idx)' fliplr(upper(idx)')], [0.8 0.8 0.8])
hold on
plot(a(idx),avg(idx), a(idx),upper(idx), a(idx),lower(idx))
hold off
set(gca, 'XScale', 'log', 'YScale','log')
I used a light gray triple [0.8 0.8 0.8] for the fill colour. Use whatever colour works for you.
Related Question