绘图代码如下所示:
figure;
snr_idx = 1:2:7;
for n = 1:4
subplot(2,2,n);
ith = snr_idx(n);
xx_cpd(:,n) = reshape(theta_est_s1(1,ith,:,1), 500,1);
yy_cpd(:,n) = reshape(theta_est_s1(2,ith,:,1), 500,1);
scatter(xx_cpd(:,n), yy_cpd(:,n), 30, 'o', 'LineWidth', 5e-5)
grid on
xlabel('\phi_1 (deg)','fontsize',12)
ylabel('\phi_2 (deg)','fontsize',12)
title(['SNR = ',num2str(SNRvec(ith)), 'dB' ])
end
其中SNRvec
是一个向量:[ - 3 0 3 6 9 12 15]。
theta_est_s1
是一个四维数组,theta_est_s1
的大小为2×7×500×3。
然后得到的数字显示如下:
然而,每个子情节之间的对比不够显着。我希望所有子图都具有与第一个子图相同的轴设置,即在制作第一个子图时,轴是固定的,如下所示:
如果我在此示例中使用axis([60 70 110 120])
命令,则结果数字是正确的。然而,theta_est_s1
的范围并不固定。更改输入数据时,theta_est_s1
的最大值和最小值会发生很大变化。因此,我不能直接手动设置轴。
有没有办法解决这个问题?
谢谢!
答案 0 :(得分:1)
如果我的问题是正确的,那么这是一个想法:
由于MATLAB会自动调整轴的大小以适应数据的范围,您可以让它仅为第一个绘图设置限制,然后在每个后续绘图中检索x和y限制并将它们分配给每个子图
代码示例:
figure;
snr_idx = 1:2:7;
for n = 1:4
subplot(2,2,n);
ith = snr_idx(n);
xx_cpd(:,n) = reshape(theta_est_s1(1,ith,:,1), 500,1);
yy_cpd(:,n) = reshape(theta_est_s1(2,ith,:,1), 500,1);
scatter(xx_cpd(:,n), yy_cpd(:,n), 30, 'o', 'LineWidth', 5e-5)
%// Get the axis limits after the 1st plot
if n == 1
X_axis_lim = get(gca,'XLim')
Y_axis_lim = get(gca,'YLim')
else %// After 1st iteration, adjust limits
set(gca,'XLim',X_axis_lim);
set(gca,'YLim',Y_axis_lim);
end
grid on
xlabel('\phi_1 (deg)','fontsize',12)
ylabel('\phi_2 (deg)','fontsize',12)
title(['SNR = ',num2str(SNRvec(ith)), 'dB' ])
端