plotting confidence interval and creating second axis in one plot

5 views (last 30 days)
I would like to plot two means with their 95% confidence interval around each mean, plus the mean difference including confidence interval in the same plot but on a second axis on the right starting with 0 on the same level as the smaller mean value of the first two means. I came so far as to make the confidence intervals with the errorbar function but cannot figure out how to set a second axis and adjust it to start at the height of the one mean.
I attached a file with an example of how the plot should look like at the end. Thanks for any help!
plot([0 1 2 3],[0,mean_pre2,mean_post1,0],'bo')
hold on
plot([4 5],[mean_diff, 0],'ro')
U = [0,CIpre2_up,CIpost1_up,0,CIdiff_up,0];
L = [0,CIpre2_lo,CIpost1_lo,0,CIdiff_lo,0];
errorbar((0:5),[0,mean(maxAnklePower_pre2),mean(maxAnklePower_post1),0,mean(maxAnklePower_pre2-maxAnklePower_post1), 0],L,U,'o')
  5 Comments
Adam Danz
Adam Danz on 2 Sep 2021
Ha! I'd say you're a quick learner. You just discovered yyaxis and you were already able to address the OP's follow-up comment below my answer.
I frequently learn of long existing functions that I should have been using. The accumulation with every release is getting harder to keep up with.
Bjorn Gustavsson
Bjorn Gustavsson on 2 Sep 2021
@Adam Danz - this is especially so for problems where one has a "kind of working solution" - then it is not as urgent to keep track of the newer better solutions...

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 1 Sep 2021
Here's a demo that should get you started.
The alignment of y=0 on the right axis with the first data point at "x" is done at the bottom half of the block below.
data = [3.2 5.2 5];
err = [1.5 .8 1.6];
yyaxis left
ax = gca();
errorbar(ax, data, err, 'ko','LineStyle','none', ...
'MarkerFaceColor','k')
set(ax,'xtick',1:3,...
'xticklabel',{'x','y','difference'},...
'xlim',[0.5, 3.5], 'ylim', [-1,8])
ax.XAxis.Color = 'k';
ax.YAxis(1).Color = 'k';
ax.YAxis(2).Color = 'k';
ylabel('Mean')
% Align 0 on right y-axis with the 'x'datapoint
% at the same scale as the left y-axis
yyaxis right
distanceToLeftAxLims = ax.YAxis(1).Limits - data(1);
ax.YAxis(2).Limits = distanceToLeftAxLims;
% Add horizontal reference line
yline(0, 'k--')
  4 Comments

Sign in to comment.

More Answers (0)

Categories

Find more on Two y-axis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!