MATLAB Answers

Link axes with different Y-Scales

42 views (last 30 days)
Alexander von Mach
Alexander von Mach on 6 Nov 2019
Edited: Adam Danz on 14 Nov 2019
I'm trying to make a plot with 2 y-axes and wasn't able to use the yyaxis command since I want to change the uistack afterwards and it doesn't work with this function showhow. Now I have a new problem because of that. When I try to link the 2 axes, the y-scale of the left axis is changed to the values of the right one that are 10 times bigger.
Is there a way to link the axes to be able to "zoom" or change the parts visible without changing the axis values?
ax2 = axes('Position',[0.1300 0.1100 0.7750 0.8150]);
ax1 = axes('Position',[0.1300 0.1100 0.7750 0.8150]);
plot(ax1,[1 5 10],[1 5 10]); % Just random values not mine
plot(ax2,[1 5 10],[10 50 100]); % Just random values not mine
ax2.YAxisLocation = 'right';
set(ax1, 'Color', 'None');
ax2.XTick = [];
linkaxes([ax1 ax2]);
1.png
2.png
Thanks for your help
  2 Comments
Alexander von Mach
Alexander von Mach on 7 Nov 2019
Thank you for your answer,
the problem I have with yyaxis right/left is, that the right axis is always at the top and I want the the plots of the left to be more visible since they're more important then the right one. I looked and it seems that this option isn't available in Matlab yet.

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 7 Nov 2019
Edited: Adam Danz on 14 Nov 2019
Currently (r2019b) the UI stack cannot be controlled with yyaxis axes which always results in right-axis objects at the top of the stack. If left-axis objects need to be on top of right-axis objects, use plotyy() which is the outdated version of yyaxis (as of r2016a). Just note that plotyy() may be removed in future releases (by then, hopefully uistack options will be available for yyaxis).
Here's a demo
clf()
sph = subplot(2,1,1);
[ax,h1,h2] = plotyy(sph,[0 10 20 30],[30 20 10 0],[0 10 20 30],[0 20 0 20]);
% [ x1 ],[ y1 ],[ x2 ],[ y2 ]
set([h1,h2],'LineWidth',3) % set line object properties
ax(1).Color = 'None'; % set axis 1 (left axis) to transparent
uistack(ax(1),'top') % put axis 1 on top
  5 Comments
Adam Danz
Adam Danz on 14 Nov 2019
@Alexander von Mach, there was a problem with my original answer, sorry to have led you astray. I've updated my answer with recommendations to use plotyy() which is an outdated function but it's a lot easier and cleaner than overlaying and linking 2 axes on your own.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by