Add second x axis at the bottom of each subplot

9 views (last 30 days)
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 Comments
dpb
dpb on 8 Sep 2022
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>.

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!