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
16 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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.
Risposta accettata
Paul
il 19 Apr 2024
Modificato: Paul
il 20 Apr 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
Più risposte (1)
Voss
il 19 Apr 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
Vedere anche
Categorie
Scopri di più su Data Distribution Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!