# How can I force a MATLAB plot with two y-axes to have 0 at the same height for both axes?

107 Ansichten (letzte 30 Tage)
Joseph Cunningham am 6 Okt. 2022
I'm plotting two metrics vs a single x-axis. However, when the plots are output, the 0 for each of the y-axes is at a different vertical position in the graph. How can I cause them to be in the same position? (ie. at the bottom edge of the graph?) For reference, all values plotted are positive. See the attached:
Thanks!
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Walter Roberson am 6 Okt. 2022
To have the plots have a common origin, you need to adjust the ylim() for one or both plots such that the first value for the second plot has the same proportion relative to its ylim as the first value of the first plot has relative to its ylim.
rng(12345)
y1 = randn(50,1);
y2 = randn(50,1) .* sin(2*pi*rand(50,1));
yyaxis right
plot(y1)
ylim auto
yyaxis left
plot(y2)
ylim auto
[l1, u1] = bounds(y1);
[l2, u2] = bounds(y2);
[l1, u1; l2, u2]
ans = 2×2
-2.3876 2.1233 -2.4340 1.1394
%syms p
%(y2(1)-(l2-p))/(u2-(l2-p)) == (y1(1)-l1)/(u1-l1)
p = (y2(1) - l2 + ((l2 - u2)*(l1 - y1(1)))/(l1 - u1))/((l1 - y1(1))/(l1 - u1) - 1);
yyaxis right
ylim([l1, u1])
yyaxis left
ylim([l2-p, u2])
If my calculations are right, the origins of the two plots now align.
##### 3 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
Torsten am 7 Okt. 2022
x = 0:0.1:1;
y1 = x.^2 + 3 ;
y2 = 0.001*x.^2;
yyaxis right
plot(y1)
ylim ([0 4])
yyaxis left
plot(y2)
ylim auto
Joseph Cunningham am 7 Okt. 2022
Thank you Torsten, this was the simple solution that I had somehow overlooked! Thanks!

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

R2022b

### Community Treasure Hunt

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

Start Hunting!

Translated by