Plotting multiple functions, while showing only parts of them

8 vues (au cours des 30 derniers jours)
Maxtron Moon
Maxtron Moon le 27 Juin 2020
Commenté : Mara le 2 Juil 2020
So, I have this code that plots the blackbody spectrum for two temperatures (so, technically two functions). The problem is that I don't want to plot the entire functions. I want the blue graph to stop after it reaches its maximum (given by the vertical line) so the part right to the max, and the orange plot to show only parts after it reaches its max (only parts to its right), because I want to plot a third linear function to connect these two maximums, Is that possible?
% plot the blackbody curves - spectral radiance at the aperture of the
% blackbody (L(nu,T)=(c/4pi)*u(nu,T)) where u is the spectral
% distribution of radiant energy in the blackbody
freq = c./(1e-6.*[0.0001:0.0001:0.05 0.05:0.01:10000.0]); % (Hz)
A = (h.*freq)./(k.*Tstar); % (dimensionless)
B = (2.0.*h./c^2).*(freq).^3; % (W/m2/sr/Hz)
BBSpectralRad = B.*(1.0./(exp(A)-1)); % (W/m2/sr/Hz)
plot(freq,BBSpectralRad);
hold all;
plot([freqStar freqStar],[1e-15 max(BBSpectralRad)], ...
'--','color',[0.5 0.5 0.5]);
grid on
hold all;
% label the plot
xlim([1e11 1e17]);
ylim([1e-15 1e-4]);
set(gca, 'YScale', 'log');
set(gca, 'XScale', 'log');
text(2e11,1e-7, ...
'$\nu_{peak} = 5.879\times 10^{10} T$', 'fontsize',16,'Interpreter','latex');
xlabel('\bf\fontname{arial}\fontsize{14}Frequency (\nu) [Hz]');
ylabel('\bf\fontname{arial}\fontsize{14}Spectral Radiance [W m^{-2} sr^{-1} {Hz}^{-1}]');
title('\bf\fontname{arial}\fontsize{14}Blackbody Radiation','Fontsize',14);
hold on
Tstar = 18974; % (K)
freqStar = WeinLawCnst.*Tstar; % (Hz)
freq = c./(1e-6.*[0.0001:0.0001:0.05 0.05:0.01:10000.0]); % (Hz)
A = (h.*freq)./(k.*Tstar); % (dimensionless)
B = (2.0.*h./c^2).*(freq).^3; % (W/m2/sr/Hz)
BBSpectralRad = B.*(1.0./(exp(A)-1)); % (W/m2/sr/Hz)
plot(freq,BBSpectralRad);
hold all;
plot([freqStar freqStar],[1e-15 max(BBSpectralRad)], ...
'--','color',[0.5 0.5 0.5]);
grid on
hold all;
  1 commentaire
Ameer Hamza
Ameer Hamza le 27 Juin 2020
Can you share the value of variables needed to run this code?

Connectez-vous pour commenter.

Réponses (1)

Mara
Mara le 27 Juin 2020
Hello,
you can plot only to the maximal y-value by finding the index of it in your vector of y-values. When you plot x and y, you specify that you only want to plot to that point or from that point on to the end.
idx = find(y==max(y));
plot(x(1:idx), y(1:idx)) % or plot(x(idx:end), y(idx:end))
you can also retrieve and change the x and y data later from the properties of your axes:
p = plot(x,y)
idx = find(p.YData == max(p.YData));
set(p, 'XData' , p.XData(1:idx), 'YData', p.YData(1:idx))
  2 commentaires
Adam Danz
Adam Danz le 1 Juil 2020
Instead of
idx = find(y==max(y));
use
[~, idx] = max(y);
Mara
Mara le 2 Juil 2020
Ah, alright, thank you!

Connectez-vous pour commenter.

Catégories

En savoir plus sur 2-D and 3-D Plots dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by