shade area under a semilog plot
Afficher commentaires plus anciens
In the code below, I would like to shade the area between freq = 300 to freq = 3000:
freq = 100:1:10000;
pnoise = -60:-.01:-159;
subplot(1, 2, 1);
semilogx(freq,pnoise); grid on; axis([0 10^5 -160 -70]);
title('Original Plot');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
subplot(1, 2, 2);
H1=area(semilogx(freq,pnoise)); grid on; axis([0 10^5 -160 -70]);
hold on
title('Plot with Area Shaded');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
idx=freq>300&freq<3000;
H=area(freq(idx),pnoise(idx));
set(H(1),'FaceColor',[1 0.5 0]);
However, I am not getting the second plot to show up with the shaded region correctly. Any help is appreciated.
1 commentaire
Muthu Annamalai
le 27 Juil 2015
Your problem seems to be that X-axis on subplot(1,2,2) is linearly spaced instead of it being log spaced.
Réponse acceptée
Plus de réponses (2)
Muthu Annamalai
le 27 Juil 2015
Hello @monkey_matlab,
After some experimenting I find the following a interesting variant for your requirement,
close all
freq = 100:1:10000;
pnoise = -60:-.01:-159;
subplot(1,2,1)
semilogx(freq,pnoise); grid on; axis([0 10^5 -160 -70]);
title('Original Plot');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
subplot(1,2,2)
H=semilogx(freq,pnoise);grid on; axis([0 10^5 -160 -70]);
grid on;
title('Plot with Area Shaded');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
vert = linspace(-160,-70,100);
H = gca
hline1 = line(ones(1,100)*300,vert, ...
'LineWidth',4,...
'Color','red',...
'Parent',H);
hline2 = line(ones(1,100)*3000,vert, ...
'LineWidth',4,...
'Color','red',...
'Parent',H);
Azzi Abdelmalek
le 27 Juil 2015
Use
H1=area(log10(freq),pnoise)
1 commentaire
monkey_matlab
le 27 Juil 2015
Catégories
En savoir plus sur Graphics Performance dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

