plotyy: problem with ticks
Ältere Kommentare anzeigen
Hi. I have this graph but I cannot figure out how to adjust the ticks. Can you help me out?

[ax,h1,h2] = plotyy(t,R(:,1),[t,t],[fval,tensione_vapore]);
minimum_left = min(R(:,1));
maximum_left = max(R(:,1));
minimum_right = min(fval);
maximum_right = max(fval);
set(ax(1),'YTick',[minimum_left - 0.1 * minimum_left : (maximum_left - minimum_left) / 10 : maximum_left + maximum_left * 0.1])
set(ax(2),'YTick',[minimum_right - 0.1 * maximum_left : (maximum_right - minimum_right) / 10 : maximum_right + maximum_right * 0.1])
Edit The last two ticks on the right and left axis should be located at the corners (right and left).
function RP1_senza_loop()
R0 = 20e-6;
P0 = 101325;
Pmin = 83720.4;
f = 1e6 / 40;
Pvap = 84550;
tspan = [0 500e-6]; %
options = odeset('RelTol',1e-7,'AbsTol',1e-7);
[t,R] = ode45(@(t,R) DE(t,R,R0,P0,Pmin,f,Pvap), tspan, [R0,0],options);
%
fval = zeros(length(t),1);
for ii = 1 : length(t)
fval(ii) = P(t(ii),P0,Pmin,f);
end
%
t = t * 1e6;
R = R * 1e6;
tensione_vapore = Pvap * ones(length(t),1);
[ax,h1,h2] = plotyy(t,R(:,1),[t,t],[fval,tensione_vapore]);
xlabel('Time (\mus)')
ylabel(ax(1),'R (\mum)')
ylabel(ax(2),'Pressure (Pa)')
minimum_left = min(R(:,1));
maximum_left = max(R(:,1));
minimum_right = min(fval);
maximum_right = max(fval);
set(ax(1),'YTick',[minimum_left - 0.1 * minimum_left : (maximum_left - minimum_left) / 10 : maximum_left + maximum_left * 0.1])
set(ax(2),'YTick',[minimum_right - 0.1 * maximum_left : (maximum_right - minimum_right) / 10 : maximum_right + maximum_right * 0.1])
end
%
function Rdot = DE(t,R,R0,P0,Pmin,f,Pvap)
S = 0.05984;
rho = 961.5;
mi = 0.297e-3; % kg / (m * s)
c = 1481;
%
Rdot = zeros(2,1);
Rdot(1) = R(2);
Rdot(2) = -1.5 * R(2) * R(2) / R(1) + 1 / (R(1) * rho) *...
(Pvap - P(t,P0,Pmin,f) + (P0 - Pvap + 2 * S / R0) *...
(R0 / R(1))^3 - 2 * S / R(1) - 4 * mi * R(2) / R(1) +...
R(1) / c * (-3 * R0^3 / R(1)^4 * R(2) * (P0 - Pvap + 2 * S /R0) -...
derivata(t,P0,Pmin,f)));
end
%
function fval = P(t,P0,Pmin,f)
if (t <= 40e-6)
fval = P0;
elseif (t > 40e-6) && (t <= 60e-6)
fval = (P0 + Pmin) / 2 + (P0 - Pmin) / 2 * cos(2 * pi * f * t);
elseif (t > 60e-6) && (t <= 100e-6)
fval = Pmin;
elseif (t > 100e-6) && (t <= 120e-6)
fval = (P0 + Pmin) / 2 + (P0 - Pmin) / 2 * cos(2 * pi * f * t);
else
fval = P0;
end
end
%
function dPdt = derivata(t,P0,Pmin,f)
if (t <= 40e-6)
dPdt = 0;
elseif (t > 40e-6) && (t <= 60e-6)
dPdt = (Pmin - P0) * pi * f * sin(2 * pi * f * t);
elseif (t > 60e-6) && (t <= 100e-6)
dPdt = 0;
elseif (t > 100e-6) && (t <= 120e-6)
dPdt = (Pmin - P0) * pi * f * sin(2 * pi * f * t);
else
dPdt = 0;
end
end
I tried with this, but Matlab uses as left axis limit 100. It is too much.
leftlimits = ylim(ax(1));
rightlimits = ylim(ax(2));
set(ax(1),'YTick',[leftlimits(1) : (leftlimits(2) - leftlimits(1)) / 10 : leftlimits(2)])
set(ax(2),'YTick',[rightlimits(1) : (rightlimits(2) - rightlimits(1)) / 10 : rightlimits(2)])

1 Kommentar
Mischa Kim
am 10 Dez. 2016
Unless you tell us how exactly the ticks should be adjusted we cannot help. Also, please attach entire code so we can reproduce.
Akzeptierte Antwort
Weitere Antworten (1)
dpb
am 10 Dez. 2016
set(ax,{'ylim'},{[minimum_left maximum_left];[minimum_right maximum_right]})
See
doc set % for details on syntax for multiple values at one go...
Or, of course, just use ylim on each axes handle or the new-fangled methods for a more verbose method.
Kategorien
Mehr zu Parametric Spectral Estimation finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
