linkaxes(ax,'x') + candle() + automatic adjustment of y limits of subplots

1 view (last 30 days)
I have a figure with two subplots, which share the same x range but have very different y ranges. I link the x axes with linkaxes(ax,'x'). If I zoom in on, say, the second subplot, the x limits on both plots are changed simultaneously. However, the y limits on the first plot are too wide now, hence I'd like Matlab to do an automatic adjustment/zoom of the y limits for the first subplot. I'd use
linkaxes(ax,'x')
set(ax,'ylimmode','auto')
and the ylims should be reset automatically every time I zoom in on any subplot. But... Matlab doesn't adjust YLim correctly. How can I fix this?
EDIT: In one of the subplots, I call the function candle(). This seems to cause the problems. When I replace candle() by plot(), everything is ok. How to make this work with candle()?

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 20 Oct 2012
x=0:0.1:10;
ax(1)=subplot(2,1,1);
ax(2)=subplot(2,1,2);
plot(ax(1),t,sin(2*t))
plot(ax(2),t,2*sin(t))
linkaxes(ax,'x')
  4 Comments
Herwig Peters
Herwig Peters on 20 Oct 2012
Ok, I've created a small example. Try zooming in on the second plot around x=500.
clear ax
n = 1000;
P.trend = [linspace(1,8,n/2)';linspace(8,2,n/2)'];
P.high = P.trend+rand(n,1);
P.low = P.trend+rand(n,1);
P.close = P.trend+rand(n,1);
P.open = P.trend+rand(n,1);
I.trend = linspace(7,3,n)';
I.high = I.trend+rand(n,1);
I.low = I.trend+rand(n,1);
I.close = I.trend+rand(n,1);
I.open = I.trend+rand(n,1);
ax(1) = subplot(2,1,1);
candle(P.high,P.low,P.close,P.open)
ax(2) = subplot(2,1,2);
candle(I.high,I.low,I.close,I.open)
linkaxes(ax,'x')
set(ax,'ylimmode','auto')

Sign in to comment.


Ziad Sliti
Ziad Sliti on 4 Jul 2017
You just have to remove the command :
axis([xmin xmax ymin ymax])
and axis will be adjusted automatically.

Categories

Find more on Line Plots 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!