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

时间:2015-02-02 03:55:03

标签: matlab plot matlab-figure figure

绘图代码如下所示:

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。

然后得到的数字显示如下:

fig1

然而,每个子情节之间的对比不够显着。我希望所有子图都具有与第一个子图相同的轴设置,即在制作第一个子图时,轴是固定的,如下所示:

fig1

如果我在此示例中使用axis([60 70 110 120])命令,则结果数字是正确的。然而,theta_est_s1的范围并不固定。更改输入数据时,theta_est_s1的最大值和最小值会发生很大变化。因此,我不能直接手动设置轴。

有没有办法解决这个问题?

谢谢!

1 个答案:

答案 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' ])