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

4 次查看(过去 30 天)
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()?

回答(2 个)

Azzi Abdelmalek
Azzi Abdelmalek 2012-10-20
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 个评论
Herwig Peters
Herwig Peters 2012-10-20
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')

请先登录,再进行评论。


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

类别

Help CenterFile Exchange 中查找有关 Line Plots 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by