Filling the area between curves (loglog)
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
KSSV
il 1 Set 2020
Show us the code how you have plotted this. So that people can pick up that code and help you.
Risposta accettata
Più risposte (1)
David Wilson
il 2 Set 2020
Modificato: David Wilson
il 2 Set 2020
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:
Vedere anche
Categorie
Scopri di più su Line Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!