Add second x axis at the bottom of each subplot

9 visualizzazioni (ultimi 30 giorni)
Dominik Deml
Dominik Deml il 25 Mag 2022
Commentato: dpb il 8 Set 2022
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 Commenti
Dominik Deml
Dominik Deml il 8 Set 2022
How can I add a legend to each subplot?
dpb
dpb il 8 Set 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>.

Accedi per commentare.

Risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by