我正在寻找一种方法来用两种颜色遮蔽我的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')
答案 0 :(得分:1)
正如@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
注意:确实,我错过了传奇的问题。我提到的正确,但对我来说,该区域位于其他图表之上。为了解决它,我改变了图的顺序。如果该区域具有透明度,这将不是问题。