How do I make both yyaxis axes zoom together?
Mostra commenti meno recenti
When I plot two figures using "yyaxis" and use the interactive zoom, only the right (active) axis zooms. The other one does not get updated. How can I fix this?
Risposta accettata
Più risposte (2)
Julian Hapke
il 11 Ago 2023
1 voto
Here's a function that does not rely on an activated zoom tool and also works for panning
function yysync(ax)
%YYSYNC links left and right yyaxis, so they pan and zoom synchronously
%
% unfortunately the PostSet event is also triggered when ylim() is called
% so if you want to set axis limits independently, you have to to so before
% calling yysync
%
% Syntax:
% yysync(ax)
%
% Inputs:
% ax:
% the axes whose yyaxis shall be linked
% graphics handle
% required
%
% Outputs:
% -
%
% Examples:
% -
%
% See also: yyaxis, ylim
%
rulers = ax.YAxis;
if numel(rulers) == 1
% no second y axis
return
end
factor = diff(rulers(2).Limits) / diff(rulers(1).Limits);
offset = rulers(2).Limits(1) - factor * rulers(1).Limits(1);
function setOtherLimits(~, event)
obj = event.AffectedObject;
if obj.YAxisLocation == "right"
obj.YAxis(1).Limits = (obj.YLim - offset) / factor;
else
obj.YAxis(2).Limits = factor .* obj.YLim + offset;
end
end
addlistener(ax, 'YLim', 'PostSet', @setOtherLimits);
end
Andres
il 6 Dic 2021
Modificato: MathWorks Support Team
il 10 Giu 2022
0 voti
I have uploaded a solution (yyzoom) to the File Exchange,
that stores the base values for the axes limits relation inside the callback function of a listener to the YLim property of the yyaxis chart axes. I've had the opportunity to test it with R2021a/b up to now.
Categorie
Scopri di più su Data Exploration in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!