Color areas between two curves and the x and y-axis (not polynomial)

2 visualizaciones (últimos 30 días)
I have two functions of one variable (p). I am trying to color the areas on the right of each curve. I succeed in doing this on a separate figure for each curve. I want to put those two curves on the same graph. When I try to do this, somehow it is the area on the left of the red curve that is shaded instead of the area of the right side of the red curve.
p = 0:0.001:1;
curve1 = ((3.*p)-2)./p
curve5 = 1./(2.*p);
ax1 = axes;
figure(1)
hold(ax1, 'on')
hold on
plot(p, curve1, 'LineWidth', 1.5,'linestyle','-','color',[0 0.4470 0.7410]);
hold on;
xlim([0 1]);
ylim([0 1]);
grid on;
lowerboundary = min(ylim(ax1));
area(curve1,lowerboundary,'FaceColor','b','FaceAlpha',0.2);
hold on
area(p,curve1,'FaceColor','b','FaceAlpha',0.2);
ax=gca;
figure(2)
hold(ax1, 'on')
hold on
plot(p, curve5, 'LineWidth', 1.5,'linestyle','-','color',[0.6350 0.0780 0.1840]);
hold on;
xlim([0 1]);
ylim([0 1]);
grid on;
upperboundary = max(ylim(ax1));
area(p,curve5,'FaceColor','r','FaceAlpha',0.2);
hold on
area(curve5,upperboundary,'FaceColor','r','FaceAlpha',0.2);
ax=gca;
figure(3)
hold(ax1, 'on')
hold on
plot(p, curve5, 'LineWidth', 1.5,'linestyle','-','color',[0.6350 0.0780 0.1840]);
hold on
plot(p, curve1, 'LineWidth', 1.5,'linestyle','-','color',[0 0.4470 0.7410]);
xlim([0 1]);
ylim([0 1]);
grid on
upperboundary = max(ylim(ax1));
lowerboundary = min(ylim(ax1));
area(curve5,upperboundary,'FaceColor','r','FaceAlpha',0.2);
hold on
area(p,curve5,'FaceColor','r','FaceAlpha',0.2);
hold on
area(curve1,lowerboundary,'FaceColor','b','FaceAlpha',0.2);
hold on
area(p,curve1,'FaceColor','b','FaceAlpha',0.2);
ax=gca;
Here are the outputs for the respectively figure 1, 2 and 3. My goal is to have on figure 3 the red color area on the right side of the red line, as if figures 1 and 2 were superposed/merged.
Any help would be appreciated!

Respuesta aceptada

Chunru
Chunru el 28 de Feb. de 2024
It seems that area function cannot individually change the basevalue (I have done some separate tests).
One work around is to use two axes of same position in the same figure so that each axes has its one basevalue.
p = 0:0.001:1;
curve1 = ((3.*p)-2)./p;
curve5 = 1./(2.*p);
figure(1)
ax1 = axes;
hold(ax1, 'on')
plot(p, curve1, 'LineWidth', 1.5,'linestyle','-','color',[0 0.4470 0.7410]);
xlim([0 1]);
ylim([0 1]);
grid on;
lowerboundary = min(ylim(ax1));
area(p, curve1, lowerboundary,'FaceColor','b','FaceAlpha',0.2);
figure(2)
ax1 = axes;
hold(ax1, 'on')
plot(p, curve5, 'LineWidth', 1.5,'linestyle','-','color',[0.6350 0.0780 0.1840]);
xlim([0 1]);
ylim([0 1]);
grid on;
upperboundary = max(ylim(ax1));
area(p,curve5,upperboundary,'FaceColor','r','FaceAlpha',0.2);
% Workaround with 2 axes
f = figure(3);
ax1 = axes(f);
hold(ax1, 'on')
plot(ax1, p, curve5, 'LineWidth', 1.5,'linestyle','-','color',[0.6350 0.0780 0.1840]);
xlim(ax1,[0 1]);
ylim(ax1,[0 1]);
grid on
upperboundary = max(ylim(ax1));
area(ax1, p, curve5, upperboundary,'FaceColor','r','FaceAlpha',0.2);
ax2= axes(f, "Position", ax1.Position, "Color", "none");
hold(ax2, 'on')
plot(ax2, p, curve1, 'LineWidth', 1.5,'linestyle','-','color',[0 0.4470 0.7410]);
xlim(ax2,[0 1]);
ylim(ax2,[0 1]);
grid on
lowerboundary = min(ylim(ax2));
area(ax2,p, curve1,lowerboundary,'FaceColor','b','FaceAlpha',0.2);

Más respuestas (0)

Categorías

Más información sobre Interpolation en Help Center y File Exchange.

Productos


Versión

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by