Matlab,在网格后面添加彩色字段

Matlab, adding colored fields behind grid

我想在我的情节中标记某些区域,我已经使用 rectangle 解决了这个问题。现在的问题是我也想打开网格,但它被矩形覆盖了。有没有办法为背景的不同区域着色,或者让网格向前移动,以便绘制在矩形上方?

我的代码如下所示:

rectangle('Position', [0 0.46 3*l+1 1.6], 'FaceColor', bg2);
rectangle('Position', [0 0.6 3*l+1 1.6], 'FaceColor', bg);
hold on
grid on
plot(Isr(:, 2), abs(Isr(:, 1)), 'r');
plot(Isx(:, 2), abs(Isx(:, 1)), 'b');
title('Current');
axis([0 3*l 0 1.6]);
legend(Legend);
xlabel('$k$');
ylabel('$I_F/I_{3\Phi}$');

这是一个最小的例子:

l = 10;
x = linspace(0,l);

rectangle('Position', [0 0.46 l+1 1.6], 'FaceColor', 'm');
rectangle('Position', [0 0.6 l+1 1.6], 'FaceColor', 'g');
hold on
grid on
plot(x, sin(x), 'r');
plot(x, cos(x), 'b');
axis([0 l 0 1.6]);
legend('Sine', 'Cosine');

您应该可以通过修改 Layer property of your axes 来完成此操作,这会修改与图形对象相关的网格线和刻度线的位置:

l = 10;
x = linspace(0,l);

myax = axes;
rectangle('Position', [0 0.46 l+1 1.6], 'FaceColor', 'm');
rectangle('Position', [0 0.6 l+1 1.6], 'FaceColor', 'g');
hold on
grid on
plot(x, sin(x), 'r');
plot(x, cos(x), 'b');
axis([0 l 0 1.6]);
legend('Sine', 'Cosine');
myax.Layer = 'top';

请注意,我还添加了一个 axes 调用来为我提供轴的句柄。通过使用 gca with setset(gca, 'Layer', 'top');

可以在没有这个的情况下完成相同的行为