遮蔽R中两条曲线重叠的有限部分

shading a limited part of the overlap of two curves in R

我看到了在两条曲线重叠处绘制多边形的好答案 HERE。但我想知道如果我们想要遮蔽部分(而不是整个)重叠限制在02之间(as如下图所示)?

我尝试了以下但没有成功:

a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(0, 2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)

x <- a$x[a$x >= 0 & a$x <= 2]

polygon(x, c(a$y[x], b$y[x]), col = 4)

这个想法是给适当的顶点。 a$y[x] 是错误的,因为 x 不包含索引而是值。

相反,您想通过成对最小函数找到交集,并进一步对其进行子集化以适应所需范围。 pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2]

您还想考虑从上面的交点中排除的一些自由顶点,因此相应地附加 x 和 y 向量。


x = c(xaxis_cut_1,a$x[a$x >= 0 & a$x <= 2],xaxis_cut_2)
y = c(0, pmin(a$y, b$y)[a$x >= xaxis_cut_1 & a$x <= xaxis_cut_2],0 )

完整代码

# your points on xaxis:
xaxis_cut_1 = 0 ; xaxis_cut_2 = 2 ; 

# your code for curves
a <- curve(dnorm(x), -4, 6, panel.l = abline(v = c(xaxis_cut_1, xaxis_cut_2), col = 1:2))
b <- curve(dnorm(x, 2), add = TRUE, col = 2)

# calculate the desired area with a pairwise min or max function (pmin / pmax). subset the curve values on the basis of your desired x-axis range

polygon(x, y, col = 4)

here is the plot