Shade area between a curve and a vertical line and the x axis

22 Ansichten (letzte 30 Tage)
I have the following code:
clc
clear
close all
x = [0:.001:.2];
y = normpdf(x,.1,.02);
subplot(211)
plot(x,y,'linewidth',2);grid;box on;
hold on
YL = get(gca, 'ylim');
YR = YL(2) - YL(1);
YL = [YL(1) - 1000 * YR, YL(2) + 1000 * YR];
line([.14 .14], YL, 'YLimInclude', 'off', 'linewidth', 2, 'Color', ...
'black','LineStyle','-.');
I want to shade the area shown below:
  2 Kommentare
Emmanuel Sarpong
Emmanuel Sarpong am 25 Aug. 2023
I have the code below. I want to color or patch the area between the curves and wavelength (x- axis) from 3 - 5 um. I am not sure how to properly define the y limit for the patch so the patch can touch the curves. Any form of help would be appreciated. Thank you.
clc;
close all;
c=3*10^8; % speed of light in vaccum
h=6.626*10.^-34; % Planck constant
k=1.38*10.^-23; % Boltzmann constant
T=[700 900]; % Temperatures in Kelvin
Lam=(0.0:0.01:50)*1e-6; % in meters
figure(1)
for i=1:2
A2(:,i)=(2*pi*h*c*c)./((Lam.^5).*(exp((h.*c)./(k.*T(i).*Lam))-1));
hold on
plot(Lam*1e6,A2(:,i)*1e-10,'r','linewidth',2)
x = [3 5]; % Define x For patch
y = [0.152 0.19]; % Define y For patch
patch([x fliplr(x)], [zeros(size(y)) fliplr(y)], 'b')
hold off
xlabel('\lambda (\mum)','fontsize',20)
ylabel('Spectral exitance (W/cm^2/\mum)','fontsize',20) %for I2
title('Blackbody Radiation','fontsize',24)
ax=gca;
ax.XRuler.Exponent=0;
xlim([0 20])
end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Star Strider
Star Strider am 29 Mai 2020
Add these lines:
xa = linspace(0.14, 0.2, 25); % Define ‘x’ For ‘patch’
ya = normpdf(xa,.1,.02); % Define ‘y’ For ‘patch’
patch([xa fliplr(xa)], [zeros(size(ya)) fliplr(ya)], 'r')
so the compllete revised code is now:
x = [0:.001:.2];
y = normpdf(x,.1,.02);
subplot(211)
plot(x,y,'linewidth',2);grid;box on;
hold on
YL = get(gca, 'ylim');
YR = YL(2) - YL(1);
YL = [YL(1) - 1000 * YR, YL(2) + 1000 * YR];
line([.14 .14], YL, 'YLimInclude', 'off', 'linewidth', 2, 'Color', ...
'black','LineStyle','-.');
xa = linspace(0.14, 0.2, 25); % Define ‘x’ For ‘patch’
ya = normpdf(xa,.1,.02); % Define ‘y’ For ‘patch’
patch([xa fliplr(xa)], [zeros(size(ya)) fliplr(ya)], 'r')
hold off
That should do what you want.

Weitere Antworten (1)

Image Analyst
Image Analyst am 29 Mai 2020
  2 Kommentare
Mohammad
Mohammad am 29 Mai 2020
I already checked that. That doesn't address my question. I want to shade area between 3 special curves.
Image Analyst
Image Analyst am 29 Mai 2020
Actually it did. You accepted Star's answer and you'll notice he used patch(), just like the FAQ did. You just needed to figure out the boundaries of the patch, which he kindly did for you.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by