Question
Hello, I am trying to plot the lognormal distribution over 10 iterations and would like to see the mean and 3 sigma outliers. Somehow, doing this for lognormal plots does not look easy. Also, is it possible that I can skip the histogram in my plots and only look at the lognormal curves? This is the code snippet I am using. Thanks! figure(113); for i = 1:10 norm=histfit(Current_c(i,:),10,'lognormal'); %%Current_c is a 10*100 matrix %% [muHat, sigmaHat] = lognfit(Current_c(i,:)); % Plot bounds at +- 3 * sigma. lowBound = muHat - 3 * sigmaHat; highBound = muHat + 3 * sigmaHat; yl = ylim; %line([lowBound, lowBound], yl, 'Color', [0, .6, 0], 'LineWidth', 3); %line([highBound, highBound], yl, 'Color', [0, .6, 0], 'LineWidth', 3); line([muHat, muHat], yl, 'Color', [0, .6, 0], 'LineWidth', 3); grid on; set(gcf, 'Toolbar', 'none', 'Menu', 'none'); % Give a name to the title bar. set(gcf, 'Name', 'Line segmentation', 'NumberTitle', 'Off') hold on; end
Related Questions
Expert Answer
Prashant Kumar
PhD Expert
Answered Nov 20, 2025
When plotting the lognormal distribution and marking the mean and 3σ3\sigma bounds, you need to handle the lognormal nature of the data carefully. For a lognormal distribution, the mean and standard deviation in the original (non-log) space differ from the parameters μ\mu and σ\sigma of the underlying normal distribution.
Key Points:
- Lognormal Mean and 3σ3\sigma Bounds:
- For a lognormal distribution, if the parameters of the underlying normal distribution are μ\mu and σ\sigma:
- Mean: mean=eμ+σ22\text{mean} = e^{\mu + \frac{\sigma^2}{2}}
- 3σ3\sigma Bounds:
- Lower bound: eμ−3σe^{\mu - 3\sigma}
- Upper bound: eμ+3σe^{\mu + 3\sigma}
- For a lognormal distribution, if the parameters of the underlying normal distribution are μ\mu and σ\sigma:
- Skipping Histogram:
- To avoid plotting the histogram while using
histfit, remove the bar plot that represents the histogram. This can be done by hiding or deleting it after creating the plot.
- To avoid plotting the histogram while using
Updated Code:
figure(113);
for i = 1:10
% Fit the lognormal distribution
[muHat, sigmaHat] = lognfit(Current_c(i,:));
% Generate the x-values for the fitted lognormal curve
x = linspace(min(Current_c(i,:)), max(Current_c(i,:)), 100);
y = lognpdf(x, muHat, sigmaHat);
% Plot the lognormal curve
plot(x, y, 'LineWidth', 2); % No histogram here
hold on;
% Calculate lognormal mean and 3-sigma bounds
lognormalMean = exp(muHat + (sigmaHat^2) / 2);
lowBound = exp(muHat - 3 * sigmaHat);
highBound = exp(muHat + 3 * sigmaHat);
% Plot vertical lines for mean and 3-sigma bounds
yl = ylim; % Get current y-axis limits
line([lognormalMean, lognormalMean], yl, 'Color', [0, 0.6, 0], 'LineWidth', 3, 'LineStyle', '--'); % Mean
line([lowBound, lowBound], yl, 'Color', [0.6, 0, 0], 'LineWidth', 2, 'LineStyle', ':'); % Lower bound
line([highBound, highBound], yl, 'Color', [0.6, 0, 0], 'LineWidth', 2, 'LineStyle', ':'); % Upper bound
grid on;
set(gcf, 'Toolbar', 'none', 'Menu', 'none');
set(gcf, 'Name', 'Lognormal Distribution', 'NumberTitle', 'Off');
end
hold off;
Key Changes:
- Skipping Histogram:
- Removed
histfitand replaced it withlognpdfto directly plot the lognormal curve.
- Removed
- Mean and 3σ3\sigma:
- Calculated the lognormal mean and bounds using their respective formulas.
- Custom Plot:
- Plotted only the lognormal curve and marked the mean and bounds with vertical lines.
Output:
For each iteration:
- The lognormal curve is plotted for the dataset in
Current_c(i,:). - The mean (eμ+σ2/2e^{\mu + \sigma^2/2}) is shown with a dashed green line.
- The 3σ3\sigma bounds (eμ±3σe^{\mu \pm 3\sigma}) are shown with dotted red lines.
This approach avoids the histogram entirely and focuses on the lognormal curve and its statistical features.
Have a different question? Ask here