%  This plot shows the effect of a linear transform to a normal random
%  variable.

sd_neighborhood = 5;  %  We'll plot +/- this many SDs.

%  Set up X as N(5.5, 0.5) and Y as a log transform of X.
xMu = 5.5;
xSigma = 0.5;
yMu = log(xMu);
ySigma = xSigma/abs(xMu);
xMax = 2.2*xMu;
xValues = xMu-sd_neighborhood*xSigma:0.01:xMu+sd_neighborhood*xSigma;
xDensityValues = normpdf(xValues, xMu, xSigma);
yValues = log(xValues);
yDensityValues = normpdf(yValues, yMu, ySigma);

nValuesUsed = numel(xDensityValues);

%  The next few lines scale the x and y density values so they
%  appear nicely on the figure.  The goal is to show how the log
%  transform affects the width and location of the density, so the
%  actual scale is not important here.
xIntegral = trapz(xDensityValues - min(xDensityValues)) / nValuesUsed;
xIntegral = trapz(yDensityValues - min(yDensityValues)) / nValuesUsed;

normalizedXDensities = (xDensityValues - min(xDensityValues)) / xIntegral;
normalizedYDensities = (yDensityValues-min(yDensityValues))/ yIntegral;

figureScaleXDensities = (log(xMu)*normalizedXDensities)/(2*max(normalizedXDensities));
figureScaleYDensities = (xMu*normalizedYDensities)/(2*max(normalizedYDensities));

%  Plot both.
figure
orient landscape

%  Plot the x density on the horizontal axis.
xplot = plot(xValues, figureScaleXDensities, 'k', 'LineWidth', 3);
hold on;

%  Plot the y density on the vertical axis.
plot(figureScaleYDensities, yValues, 'k', 'LineWidth', 3)

%  Plot a line showing the relationship of the means.
plot(1:0.01:xMax, log(1:0.01:xMax), '-k', 'LineWidth', 3)

%  Show lines for the means connecting to the diagonal line showing
%  their relationship.
line([xMu, xMu], [0, yMu], 'LineStyle', ':', ...
'Color', [0.8, 0.8, 0.8], 'LineWidth', 3)
line([0, xMu], [yMu, yMu], 'LineStyle', ':', ...
'Color', [0.8, 0.8, 0.8], 'LineWidth', 3)
line([0, xMax], [yMu-sign(xMu), xMax/abs(xMu)+yMu-sign(xMu)], ...
'Color', 'k', 'LineWidth', 3)

%  Set axis style.
set(gca, 'Box', 'off', 'FontSize', 20, ...
'XColor', 'w', 'YColor', 'w', ...
'XLim', [-0.4, xMax], 'Ylim', [-0.03, log(xMax)], ...
'XTick', [], 'YTick', [])

set(gcf, 'Position', [600, 65, 1300, 920])
pause(1)

%  Add LaTeX intrepreted labels. Locations are hard-coded here,
%  which is not generally good practice.
meanEquation = '$y-\mu_y=\frac{1}{|\mu_x|}(x-\mu_x) \mathbf{\rightarrow}$'
text(4.6, 2.4, equation, 'FontSize', 22, 'Interpreter', 'LaTex')
variableEquation = '$\mathbf{\leftarrow} y = log(x)$'
text(9, 2.15, variableEquation , 'FontSize', 22, 'Interpreter', 'LaTex')

xlabel('$\it\mu_x$', 'FontSize', 22, 'Color', 'k', ...
'Interpreter', 'LaTex', ...
'Position', [xMu, -0.07])
ylabel('$\it\mu_y$', 'FontSize', 22, 'Color', 'k', ...
'Rotation', 0, 'Interpreter', 'LaTex', ...
'Position', [-0.25, 1.64])