如何在 semilogy plot (MATLAB) 中设置多种颜色的背景?

How to set background in multiple colors in semilogy plot (MATLAB) ?

我正在寻找一种方法来用两种颜色为半对数图的背景着色。
例如,在下图中,我绘制了三个多项式,它们在 x=1 时都相等。我想要一个矩形用于 x<1 区域,另一个矩形用于 x>1 区域。如何在背景中插入两个不同颜色的矩形以突出显示这两个区域。

MWE:

   x = 0.1:0.1:10;
   y1 = polyval([1, 0], x);      % Evaluate y = x;
   y2 = polyval([1, 0, 0], x);   % Evaluate y = x^2;
   y3 = polyval([1, 0, 0, 0], x);   % Evaluate y = x^3;    
   figure
   semilogy(x, y1, '.k', x, y2, '.b', x, y3, '.r');    title ('Three
   polynomials on a semilog y scale')    xlabel('x');    ylabel('y');   
   legend({'y= x', 'y = x^2', 'y = x^3'}, 'Location', 'Northwest')

您可以使用 area or patch 解决该问题。

正如@SardarUsama 指出的那样,others questions 上面有很好的示例,但是,您需要避免在 area 数据中包含任何零,否则会失败。

按照代码只设置一个区域。

x = 0.1:0.1:10;
y1 = polyval([1, 0], x);      % Evaluate y = x;
y2 = polyval([1, 0, 0], x);   % Evaluate y = x^2;
y3 = polyval([1, 0, 0, 0], x);   % Evaluate y = x^3;    
figure
plot(x, y1, '.k', x, y2, '.b', x, y3, '.r'); %MODIFIED   
hold on  %ADDED
title ('Three  polynomials on a semilog y scale')   
set (gca, 'Yscale', 'log'); %ADDED
xlabel('x');   
ylabel('y');   
legend({'y= x', 'y = x^2', 'y = x^3'}, 'Location', 'Northwest')

area( [1 1 10 10],[1e-3 1e+3 1e+3 1e-3 ],'FaceColor','green','facealpha',0.3)  %ADDED

以上代码适用于 2014b 之后的 matlab。如果你之前有一个,你可以使用 patch 函数(这需要对数据进行一些小的更改,但使用 Facealpha 选项)或者你可以像我下面那样将该区域移动到背景:

ax=get(gca,'Children'); %ADDED
set(gca,'Children',[ax(2) ax(3) ax(4) ax(1)]); %ADDED, move area to background

注:确实,我漏掉了图例的问题。我如前所述进行了更正,但对我而言,该区域位于其他图表之上。为了解决这个问题,我改变了情节的顺序。如果该区域是透明的,这将不是问题。