Add second x axis at the bottom of each subplot

9 次查看(过去 30 天)
I'd like to have two x-axis for each subplot.
The number of subplots is not always 2. (max. 5)
My code:
t = 0:10;
y = {sin(t);cos(t)};
j = 1;
for i = 1:2
time_plot = figure(2);
ax(j) = subplot( 2, 1, j);
plot( t, y{i} );
xlim([0 10]);
xlabel('t (s)');
ylabel('f(t)');
j = j + 1;
hold on;
end
The current result looks like this:
But it should look like this:
EDIT:
My first approach is this:
t = 0:10;
y = {sin(t);cos(t)};
%y = {sin(t);cos(t);t.*t};
j = 1;
xTicks = 0:10;
for i = 1:length(y)
time_plot = figure(2);
ax(j) = subplot( length(y), 1, j);
p = plot(t, y{i});
if length(y) < 3
hAx1=gca; % get the first axis handle so can address each desired
pos = get(hAx1, 'position');
hAx2=axes('YAxisLocation','right', ...
'Color','none', ...
'YTick',[]);
%{
hAx2=axes('YAxisLocation','right', ...
'Color','none', ...
'YTick',[], 'XTick', xTicks);
%}
hAx2.Position = hAx1.Position-[0 0.055 0 0];
hAx2.YAxis.Visible = 'off';
hAx2.Interactions = [dataTipInteraction];
xlim(hAx1, [0 10]);
xlim(hAx2, [0 5]);
xlabel(hAx1, 't (s)');
xlabel(hAx2, 't2 (s)');
ylabel(hAx1, 'f(t)');
else
xlim([0 10]);
xlabel('t (s)');
ylabel('f(t)');
end
j = j + 1;
%linkaxes([hAx1, hAx2] , 'x');
hold on;
end
This gives us the following result:
What I'd like to achieve now is to enable zoom for both axes. How does this work?
  7 个评论
dpb
dpb 2022-9-8
Either add it at the same time as add the data to each subplot so it is still the current (the one whos handle is returned by gca) axes or be sure to save all the axes handles when you create them and use the specific handle to each in turn when call <as documented in legend>.

请先登录,再进行评论。

回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by