如何在 Matlab 中自动绘制固定轴设置中的一组子图?

How to plot a group of subplots in fixed axes setting automatically in Matlab?

绘图代码如下:

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的最大值和最小值变化很大。因此,我不能直接手动设置轴。

有什么方法可以解决这个问题吗?

谢谢!

如果我答对了你的问题,下面是一个想法:

由于 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' ])   

结束