Effacer les filtres
Effacer les filtres

plot in two side of x-axis with common y-axis

4 vues (au cours des 30 derniers jours)
Milan
Milan le 26 Juil 2023
Commenté : Voss le 26 Juil 2023
Hello community, I need help to write a code to plot as shown in figure. I could plot with negative value of x but i want to plot two different plot in a single plot inrespective sign of x-axis. i also want a common y-axis as shown in figure. it's fine if you could send me a simple sample code.
Thank you

Réponse acceptée

Voss
Voss le 26 Juil 2023
% rudimentary data vaguely similar to what yours might be:
P = 0:3:15;
phi = [ ...
0.03 0.02 0.01; ...
0.016 0.01 0.006; ...
0.01 0.007 0; ...
0.007 0.005 0; ...
0.003 0 0; ...
0 0 0];
M = [ ...
9 9 9; ...
22 20 14; ...
27 18 0; ...
22 13 0; ...
17 0 0; ...
0 0 0];
% this tiledlayout will contain two axes side by side with no space between:
t = tiledlayout(1,2,'TileSpacing','none');
% create the two axes:
ax = [nexttile(t) nexttile(t)];
% reverse the x-direction of the left axes, set its y-axis
% location to the right, and turn off its box
set(ax(1),'XDir','reverse','YAxisLocation','right','Box','off')
% remove the y-tick labels and box of the right axes
set(ax(2),'YTickLabels',{},'Box','off')
% flip the order of the children, so that the yticklabels of the
% left axes will show up on top of the right axes
set(t,'Children',ax)
% hold
hold(ax,'on')
% plot stuff in the left axes
plot(ax(1),phi(:,1),P,'-k');
plot(ax(1),phi(:,2),P,'--k');
plot(ax(1),phi(:,3),P,':k');
% plot stuff in the right axes
plot(ax(2),M(:,1),P,'-k');
plot(ax(2),M(:,2),P,'--k');
plot(ax(2),M(:,3),P,':k');
% set the xlim and xticks
xlim(ax(1),[0 0.05])
xticks(ax(1),0.01*(1:5))
xlim(ax(2),[0 28])
xticks(ax(2),5.6*(1:5))
% make the axes have the same ylim
linkaxes(ax,'y')
% specify the ylim and yticks
ylim(ax,[0 18])
yticks(ax,(1:5)*3.6)
% add xlabels
xlabel(ax(1),'\phi (l/m)')
xlabel(ax(2),'M (kN-m)x10^3')
% make the title
title(t,'Px10^4')
  5 commentaires
Voss
Voss le 26 Juil 2023
You're welcome!
Voss
Voss le 26 Juil 2023
Oh, I think I see what you mean: that the x10^4 on the y-axis and the x10^3 on the right x-axis are actually multipliers for the ticks. In that case, something like this might be closer to what you want:
% rudimentary data vaguely similar to what yours might be:
P = (0:3:15)*1e4;
phi = [ ...
0.03 0.02 0.01; ...
0.016 0.01 0.006; ...
0.01 0.007 0; ...
0.007 0.005 0; ...
0.003 0 0; ...
0 0 0];
M = [ ...
9 9 9; ...
22 20 14; ...
27 18 0; ...
22 13 0; ...
17 0 0; ...
0 0 0]*1e3;
% this tiledlayout will contain two axes side by side with no space between:
t = tiledlayout(1,2,'TileSpacing','none');
% create the two axes:
ax = [nexttile(t) nexttile(t)];
% reverse the x-direction of the left axes, set its y-axis
% location to the right, and turn off its box
set(ax(1),'XDir','reverse','YAxisLocation','right','Box','off')
% remove the y-tick labels and box of the right axes
set(ax(2),'YTickLabels',{},'Box','off')
% flip the order of the children, so that the yticklabels of the
% left axes will show up on top of the right axes
set(t,'Children',ax)
% hold
hold(ax,'on')
% plot stuff in the left axes
plot(ax(1),phi(:,1),P,'-k');
plot(ax(1),phi(:,2),P,'--k');
plot(ax(1),phi(:,3),P,':k');
% plot stuff in the right axes
plot(ax(2),M(:,1),P,'-k');
plot(ax(2),M(:,2),P,'--k');
plot(ax(2),M(:,3),P,':k');
% set the xlim and xticks
xlim(ax(1),[0 0.05])
xticks(ax(1),0.01*(1:5))
xlim(ax(2),[0 28]*1e3)
xticks(ax(2),5.6e3*(1:5))
% make the axes have the same ylim
linkaxes(ax,'y')
% specify the ylim and yticks
ylim(ax,[0 18]*1e4)
yticks(ax,(1:5)*3.6e4)
% add xlabels
xlabel(ax(1),'\phi (l/m)')
xlabel(ax(2),'M (kN-m)')
% make the title
title(t,'P')

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Labels and Annotations dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by