How do I make a secondary Y axis
10 views (last 30 days)
Show older comments
I need to plot three graph against the same X axis, and to divide right Y axis into two parts as shown in the picture below.

This is how my code looks now, but the third axis is not displayed when the code is run:
figure
yyaxis left
x = [0.00;0.13;0.23;0.35;0.49;0.60;0.72;0.85;0.96;1.08;1.20];
y = [10.35;10.40;10.43;10.50;10.68;10.80;10.99;11.26;11.52;11.89;12.17];
plot(x,y, '-s')
ylabel('Head Ht (m)');
yyaxis right
y2 = [54.4;61.8;70.5;68.4;66.4;72.7;80.0;86.8;95.4;90.1;106.8];
plot(x,y2, '-o')
ylabel ('Power input Pm (W)')
hold on
y3= [0.0;21.9;32.8;51.9;77.4;86.9;96.3;107.8;113.1;138.8;133.2];
plot(x,y3,'-^g')
ylabel ('Pump efficiency (%)')
hold off
grid
xlabel('Volume flow rate Q (dm^3/s)')
legend('Head', 'Power','Efficiency', 'Location', 'NE')
2 Comments
Sam Chak
on 31 Jan 2024
I added some comments in your code so that you understand what happened.
yyaxis left
... % business done on the left axis
yyaxis right % move to the right axis
y2 = [54.4;61.8;70.5;68.4;66.4;72.7;80.0;86.8;95.4;90.1;106.8];
plot(x,y2, '-o') % done plotting y2
ylabel ('Power input Pm (W)') % done labeling y2 on the right axis
hold on
y3= [0.0;21.9;32.8;51.9;77.4;86.9;96.3;107.8;113.1;138.8;133.2];
plot(x,y3,'-^g') % done plotting y3
ylabel ('Pump efficiency (%)') % labeling y3 overwrites y2 label
hold off
Accepted Answer
Sam Chak
on 31 Jan 2024
Moved: Sam Chak
on 31 Jan 2024
Hi @Kami S
Perhap a possible solution for manipulating the graph labeling is by using the yticks() command, which allows you to customize the labeling of the y-axis. If the intersections between the graphs are not significant or meaningful for your purpose, you might consider using the following plot instead. It could be a more suitable representation for your needs.
x = [0.00;0.13;0.23;0.35;0.49;0.60;0.72;0.85;0.96;1.08;1.20];
subplot(3,1,1)
y = [10.35;10.40;10.43;10.50;10.68;10.80;10.99;11.26;11.52;11.89;12.17];
plot(x, y, '-s', 'linewidth', 1.5, 'color', '#8D5524'), grid
ylabel('Head Ht (m)');
subplot(3,1,2)
y2 = [54.4;61.8;70.5;68.4;66.4;72.7;80.0;86.8;95.4;90.1;106.8];
plot(x, y2, '-o', 'linewidth', 1.5, 'color', '#C68642'), grid
ylabel ('Pwr input Pm (W)')
subplot(3,1,3)
y3= [0.0;21.9;32.8;51.9;77.4;86.9;96.3;107.8;113.1;138.8;133.2];
plot(x, y3, '-^', 'linewidth', 1.5, 'color', '#F1C27D'), grid
ylabel ('Pump eff (%)')
xlabel('Volume flow rate Q (dm^3/s)')
More Answers (1)
Matt J
on 31 Jan 2024
Edited: Matt J
on 31 Jan 2024
It is, unfortunately, a very awkward thing to do. The datatip will show y3 with an increment of 200, but there may be ways to customize that.
yyaxis left
x = [0.00;0.13;0.23;0.35;0.49;0.60;0.72;0.85;0.96;1.08;1.20];
y = [10.35;10.40;10.43;10.50;10.68;10.80;10.99;11.26;11.52;11.89;12.17];
plot(x,y, '-s')
ylabel('Head Ht (m)');
yyaxis right
y2 = [54.4;61.8;70.5;68.4;66.4;72.7;80.0;86.8;95.4;90.1;106.8];
plot(x,y2, '-o')
ylabel ('Power input Pm (W) Pump efficiency (%) ') %<---- combine ylabels
hold on
y3= [0.0;21.9;32.8;51.9;77.4;86.9;96.3;107.8;113.1;138.8;133.2];
plot(x,y3+200,'-^g') %<---- y3 + 200
hold off
yticks([0:25:150,200:25:300]) %
yticklabels([string([0:25:150,0:10:40])]) %<---- manipulate yticks, yticklabels
ylim([0,350]) %
grid
xlabel('Volume flow rate Q (dm^3/s)')
legend('Head', 'Power','Efficiency', 'Location', 'NW')
0 Comments
See Also
Categories
Find more on Axes Appearance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!