Plotting multiple functions, while showing only parts of them

3 visualizaciones (últimos 30 días)
Maxtron Moon
Maxtron Moon el 27 de Jun. de 2020
Comentada: Mara el 2 de Jul. de 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;

Respuestas (1)

Mara
Mara el 27 de Jun. de 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 comentarios
Adam Danz
Adam Danz el 1 de Jul. de 2020
Instead of
idx = find(y==max(y));
use
[~, idx] = max(y);
Mara
Mara el 2 de Jul. de 2020
Ah, alright, thank you!

Iniciar sesión para comentar.

Categorías

Más información sobre Graph and Network Algorithms en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by