If I remove the horizontal axis labels ('Time') from the upper and middle plots on the left, the problem is less bad, but still, the copied plots are taller than the column 1 plots, which doesn't look good.
copy subplots within same figure
19 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am copying subplots within a figure, to show the same data with an expaned time base.
As you can see from the example below, the copied subplots overlap somewhat, and the legends do not get copied. Is there a better way to do this?
t=(0:200)';
x=[cos(t),sin(t),cos(t/2),sin(t/2),cos(t/4),sin(t/4)];
fig1=figure(1);
ax1(1,1)=subplot(321);
plot(t,x(:,1),'-r',t,x(:,2),'-g');
xlabel('Time'); ylabel('XA'); title('A'); legend({'cos','sin'})
ax1(2,1)=subplot(323);
plot(t,x(:,3),'-b',t,x(:,4),'-c');
xlabel('Time'); ylabel('XB'); title('B'); legend({'cos','sin'})
ax1(3,1)=subplot(325);
plot(t,x(:,5),'-m',t,x(:,6),'-y');
xlabel('Time'); ylabel('XC'); title('C'); legend({'cos','sin'})
% Next: Copy column 1 plots to column 2, and adjust axes.
for i=1:3
axtemp=subplot(3,2,2*i);
ax1(i,2)=copyobj(ax1(i,1),fig1);
ax1(i,2).Position=axtemp.Position;
delete(axtemp)
xlim([0,20])
end
Thank you.
Réponse acceptée
Paul
le 19 Avr 2024
Modifié(e) : Paul
le 20 Avr 2024
Hi William,
Use the subplot command as shown below to get the new axes aligned with the old. The legends need to be copyobj'd along with the axes.
t=(0:200)';
x=[cos(t),sin(t),cos(t/2),sin(t/2),cos(t/4),sin(t/4)];
fig1=figure(1);
ax1(1,1)=subplot(321);
plot(t,x(:,1),'-r',t,x(:,2),'-g');
xlabel('Time'); ylabel('XA'); title('A'); L(1,1) = legend({'cos','sin'});
ax1(2,1)=subplot(323);
plot(t,x(:,3),'-b',t,x(:,4),'-c');
xlabel('Time'); ylabel('XB'); title('B'); L(2,1) = legend({'cos','sin'});
ax1(3,1)=subplot(325);
plot(t,x(:,5),'-m',t,x(:,6),'-y');
xlabel('Time'); ylabel('XC'); title('C'); L(3,1) = legend({'cos','sin'});
% Next: Copy column 1 plots to column 2, and adjust axes.
for i=1:3
% axtemp=subplot(3,2,2*i);
htemp = copyobj([ax1(i,1) L(i)],fig1);
ax1(i,2) = htemp(1);
% Save handle to new legend if desired.
% Corrected based on W. Rose comment below.
% L(3,2) = htemp(2);
L(i,2) = htemp(2);
subplot(3,2,2*i,ax1(i,2))
% ax1(i,2).Position=axtemp.Position;
% delete(axtemp)
xlim([0,20])
end
3 commentaires
William Rose
le 20 Avr 2024
Modifié(e) : William Rose
le 20 Avr 2024
Plus de réponses (1)
Voss
le 19 Avr 2024
To copy the legends, copy each with its associated axes (vector of objects to copyobj).
To fix the overlapping, set the OuterPosition the same, rather than the Position.
t=(0:200)';
x=[cos(t),sin(t),cos(t/2),sin(t/2),cos(t/4),sin(t/4)];
fig1=figure(1);
ax1(1,1)=subplot(321);
plot(t,x(:,1),'-r',t,x(:,2),'-g');
xlabel('Time'); ylabel('XA'); title('A'); legend({'cos','sin'})
ax1(2,1)=subplot(323);
plot(t,x(:,3),'-b',t,x(:,4),'-c');
xlabel('Time'); ylabel('XB'); title('B'); legend({'cos','sin'})
ax1(3,1)=subplot(325);
plot(t,x(:,5),'-m',t,x(:,6),'-y');
xlabel('Time'); ylabel('XC'); title('C'); legend({'cos','sin'})
% Next: Copy column 1 plots to column 2, and adjust axes.
for i=1:3
axtemp=subplot(3,2,2*i);
temp=copyobj([ax1(i,1) ax1(i,1).Legend],fig1);
ax1(i,2) = temp(1);
ax1(i,2).OuterPosition=axtemp.OuterPosition;
delete(axtemp)
xlim([0,20])
end
2 commentaires
Voir également
Catégories
En savoir plus sur Data Distribution Plots 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!