如何在半决赛图(MATLAB)中设置多种颜色的背景?

时间:2017-10-05 17:35:15

标签: matlab matlab-figure

我正在寻找一种方法来用两种颜色遮蔽我的semilog图的背景 例如,在下图中,我绘制了三个多项式,它们在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')

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用areapatch解决此问题。

正如@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

注意:确实,我错过了传奇的问题。我提到的正确,但对我来说,该区域位于其他图表之上。为了解决它,我改变了图的顺序。如果该区域具有透明度,这将不是问题。