如何在 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' ])
结束
绘图代码如下:
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' ])
结束