shade area under a semilog plot
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
monkey_matlab
am 27 Jul. 2015
Kommentiert: Star Strider
am 27 Jul. 2015
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 Kommentar
Muthu Annamalai
am 27 Jul. 2015
Your problem seems to be that X-axis on subplot(1,2,2) is linearly spaced instead of it being log spaced.
Akzeptierte Antwort
Star Strider
am 27 Jul. 2015
It took a bit of experimenting with the patch function. See if this does what you want:
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);
semilogx(freq,pnoise)
hold on
title('Plot with Area Shaded');
xlabel('Frequency (Hz)'); ylabel('Amplitude');
idx=freq>300&freq<3000;
minpnoise = pnoise(find(idx,1,'last'));
patch([300 freq(idx) 3000 300], [-160 pnoise(idx) -160 -160], [1 0.5 0]);
grid on; axis([0 10^5 -160 -70]);
2 Kommentare
Star Strider
am 27 Jul. 2015
I have no idea. The only possibility I can think of is to see if putting the axis call closer to the semilogx call in the second subplot makes a difference.
My code produced the plot I posted (that seems correct), so I would not be able to reproduce your result. (I’m using R2015a.)
Weitere Antworten (2)
Muthu Annamalai
am 27 Jul. 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);
0 Kommentare
Siehe auch
Kategorien
Mehr zu Contour Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!