如何在 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')
正如@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
注:确实,我漏掉了图例的问题。我如前所述进行了更正,但对我而言,该区域位于其他图表之上。为了解决这个问题,我改变了情节的顺序。如果该区域是透明的,这将不是问题。
我正在寻找一种方法来用两种颜色为半对数图的背景着色。
例如,在下图中,我绘制了三个多项式,它们在 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')
正如@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
注:确实,我漏掉了图例的问题。我如前所述进行了更正,但对我而言,该区域位于其他图表之上。为了解决这个问题,我改变了情节的顺序。如果该区域是透明的,这将不是问题。