Filling the area between curves (loglog)
7 次查看(过去 30 天)
显示 更早的评论
Hello,
I would like to fill the area between the two lines (on the interval 10^-2 & 10^-1):
I tried creating my own polygon using "patch" but I wondered if there is any better and more straightforward option ?
I tried using "fill" with different options but I couldn't make it work.
load('Area_glaciers_scandinavia.mat');
% Create log bins that span from 0.01 to 10000 km2
cc = 10.^(-2:0.1:4);
% Create the histogram of those bins (count nb of glacier/bin)
H = hist(area,cc);
figure()
loglog(cc,H)
idx(1) = find(roundn(cc,-4)==0.1259); %put the boundaries of the linear part of the curve)
idx(2)= find(roundn(cc,-2)==19.95);
%use polyfit
%we use log10 because we are looking for the exponents
P = polyfit(log10(cc(idx)), log10(H(idx)),1);
cf = polyval(P,log10(cc));
hold on
loglog(cc,10.^cf);
2 个评论
KSSV
2020-9-1
Show us the code how you have plotted this. So that people can pick up that code and help you.
采纳的回答
更多回答(1 个)
David Wilson
2020-9-2
编辑:David Wilson
2020-9-2
I too had some difficulty to do this elgantly. I changed the name of your data file, and commented out the material that didn't work.
%% patch in loglog plots
load('glacier_Data.mat');
%{
% Create log bins that span from 0.01 to 10000 km2
cc = 10.^(-2:0.1:4);
% Create the histogram of those bins (count nb of glacier/bin)
H = hist(area,cc);
figure()
%}
loglog(cc,H)
idx(1) = find(roundn(cc,-4)==0.1259); %put the boundaries of the linear part of the curve)
idx(2)= find(roundn(cc,-2)==19.95);
%use polyfit
%we use log10 because we are looking for the exponents
P = polyfit(log10(cc(idx)), log10(H(idx)),1);
cf = polyval(P,log10(cc));
loglog(cc,H, ...
cc,10.^cf);
grid on
Now try on a linear plot. (Just for testing)
%% Now do the shading on a linear plot
logcc = log10(cc); logH = log10(H);
idx = find(cc<1e-1);
xp = [logcc(idx), fliplr(logcc(idx))];
yp = [cf(idx), fliplr(logH(idx))]
plot(logcc, logH, ...
logcc, cf, '--')
patch(xp, yp, 'y')
Now try, as requested on a log plot. It's certainly not elegant, but does work.
%% Now try on log scale
loglog(cc,H, ...
cc,10.^cf);
h=patch(10.^xp, 10.^yp, 'y', 'faceAlpha', 0.5)
grid on
This gives the following:
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Line Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!